【Python学习】http网站发送请求
方法一:requests
官方文档
https://pypi.org/project/requests/
Requests模块是一个用于网络请求的模块,主要用来模拟浏览器发请求。其实类似的模块有很多,比如urllib,urllib2,httplib,httplib2,他们基本都提供相似的功能。但是这些模块都复杂而且差不多过时了,requests模块简单强大高效,使得其在众多网络请求模块中脱引而出。
requests使用
环境安装:pip install requests
使用流程:
- 指定url
- 基于requests模块发送请求
- 获取响应对象中的数据值
- 持久化存储(不是必须的)
案例:爬取百度首页的数据
# 1. 导包
import requests# 2. 指定url
url = "https://www.baidu.com"
# 3. 使用GET方法发送请求,该方法会返回一个响应对象
response = requests.get(url=url)
# 4. 获取响应数据
print(response.status_code) # 打印状态码
print(response.url) # 打印请求url
print(response.headers) # 打印响应头头信息
print(response.text) # 以文本形式打印网页源码# 保存数据
response.encoding = 'utf-8' # 指定编码格式,不然打开乱码
text = response.text
with open('./2.html' ,'w' ,encoding='utf-8') as f:f.write(text)
requests请求方法
上面的案例requests发送了一个GET请求方法,除此之外还有其他的请求方法。最常用的就是GET和POST方法。
res = requests.get ()
res = requests.post ()
res = requests.put ()
res = requests.delete ()
res = requests.head ()
res = requests.options ()
且在指定方法发送请求的时候,有时候还需要在请求方法括号中requests.get(url=url, xx = xx)指定一些参数,如下。先了解一下
方法 | 参数名字 |
---|---|
HTTP头部 | headers |
GET参数 | params |
POST参数 | data |
文件 | files |
Cookies | cookies |
重定向处理 | allow_redirects = False/True |
超时 | timeout |
证书验证 | verify = False/True |
工作流(延迟下载) | stream=False/ True |
事件挂钩 | hooks=dict(response=) |
身份验证 | auth= |
代理 | proxies= |
requests响应对象属性
在上面爬取百度首页时,response = requests.get(url=url)其返回的是一个响应对象,而如果我们想要获取具体的数据比如响应码或者网页源码时,就需要通过指定响应对象的属性进行获取。如response.status_code获取响应码
内容 | 方法 |
---|---|
获取请求url | res.url |
状态码 | res.status_code |
响应数据(以字符串形式) | res.text |
返回的是一个原生字符串,是bytes类型 | res.content |
查看服务器响应头 | res.headers |
查看cookie | res.cookies |
发送get请求
# 导入requests包
import requestsurl = "http://www.tuling123.com/openapi/api"
myParams = {"key":"username","info":"plusroax"} # 字典格式,推荐使用,它会自动帮你按照k-v拼接url
res = requests.get(url=url, params=myParams)print('url:',res.request.url)# 查看发送的url
print("response:",res.text) # 返回请求结果
输出
url: http://www.tuling123.com/openapi/api?key=username&info=plusroax
response: {"code":40001,"text":"亲爱的,key不对哦。"}
发送post请求
# 导入requests包
import requestsurl = "http://httpbin.org/post"
data = {"name": "plusroax","age": 18} # Post请求发送的数据,字典格式
res = requests.post(url=url, data = data)#这里传入的data,是body里面的数据。params是拼接url时的参数print("发送的body:",res.request.body)
print("response返回结果:",res.text)
输出
发送的body: name=plusroax&age=18
response返回结果: {"args": {}, "data": "", "files": {}, "form": {"age": "18", "name": "plusroax"}, "headers": {"Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Content-Length": "20", "Content-Type": "application/x-www-form-urlencoded", "Host": "httpbin.org", "User-Agent": "python-requests/2.27.1", "X-Amzn-Trace-Id": "Root=1-633e9c08-5916485673661c9c6b286b47"}, "json": null, "origin": "6.6.6.6", "url": "http://httpbin.org/post"
}
方法二:requests-html
官方文档
https://pypi.org/project/requests-html/
安装命令
pip install requests-html
发送get请求
from requests_html import HTMLSession# 获取请求对象
session = HTMLSession()sina = session.get('https://news.sina.com.cn/')sina.encoding = 'utf-8'print(sina.text)
方法三:urllib
发送post请求
# 创建一个 HTTP POST 请求,输出响应上下文
from urllib.request import urlopen
from urllib.parse import urlencode
data = {'kw' : 'python'}
data = bytes(urlencode(data), encoding = 'utf-8')
response = urlopen("https://fanyi.baidu.com/sug", data)
print(response.read().decode('unicode_escape'))
输出
{"errno":0,"data":[{"k":"Python","v":"蛇属,蟒蛇属"},{"k":"python","v":"n. 巨蛇,大蟒"},{"k":"pythons","v":"n. 巨蛇,大蟒( python的名词复数 )"}]}
携带header发送get请求
# 采用 HTTP GET 请求的方法模拟谷歌浏览器访问网站,输出响应上下文
from urllib import request,parse
url = 'http://www.httpbin.org/get'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
}
req = request.Request(url, headers = headers, method = 'GET')
response = request.urlopen(req)
print(response.read())
【Python学习】http网站发送请求相关推荐
- python客户端通过代理发送请求
国外有些网站被屏蔽或者访问较慢,通过找代理服务器来访问,加快访问速度. 这边本地运行反向代理,一开始认为在port 8088,后来netstat发现在本地的8087. 于是python使用urllib ...
- Python模拟搜狗翻译发送请求
开发工具与关键技术:Python IDEL.Python 作者:曾浩源 撰写时间:2019年08月07日 写一个小功能来模拟搜狗翻译发送请求,让这个小功能拥有翻译的功能. 首先打开搜狗翻译,然后F12 ...
- python通过requests库发送请求
文章目录 一.requests库 二.发送请求 1.发送get请求 2.传递url参数 (1)直接通过url传递 (2)通过字符串传递 (3)通过字典传递 3.发送post请求 (1)提交form表单 ...
- python学习技术网站收集
一路前行,留下足印... 1.工具类 pycharm远程调试 2.学习网站 51cto 廖学峰基础理论学习 菜鸟教程-基础理论 3.练手 80个Python练手项目列表 Python 全栈案例初体验
- python 爬虫1:发送请求
import socket import urllib.request import urllib.parse import urllib.error# 一个测试用网址,后面是跟的是http请求方式p ...
- python学习(26)分析ajax请求抓取今日头条cosplay小姐姐图片
分析ajax请求格式,模拟发送http请求,从而获取网页代码,进而分析取出需要的数据和图片.这里分析ajax请求,获取cosplay美女图片. 登陆今日头条,点击搜索,输入cosplay 下面查看浏览 ...
- Python学习笔记——爬虫之urllib数据抓取
目录 urllib库的基本使用 Get方式 POST方式: 获取AJAX加载的内容 Handler处理器 和 自定义Opener urllib库的基本使用 所谓网页抓取,就是把URL地址中指定的网络资 ...
- Python学习笔记--day09 函数 模块 (文件、路径操作)
第二模块 函数&模块 第一模块主要是学习python基础知识,从第二模块开始就可以通过程序去解决工作中实际的问题. 函数,一个用于专门实现某个功能的代码块(可重用). 内置函数 len.bin ...
- 如何利用python爬取网站数据
Python是一种非常适合用于网络爬虫的编程语言,以下是Python爬取网站数据的步骤: 1. 确定目标网站和所需数据:首先要找到需要爬取数据的网站,确定你需要爬取的数据是哪一部分. 2. 发送请求: ...
最新文章
- docker mysql 生产环境_Docker构建MySQL环境
- python计算圆面积保留两位数_python中怎么实现保留两位小数
- 使用Java和Spring构建现代Web应用程序
- 使用CXF发布WebService服务简单实例
- 95-136-041-源码-Operator-TwoInputStreamOperator
- mysql 排序字段 添加索引吗_mysql需要在哪些字段上加索引?
- 推荐!可视化垃圾回收算法(转)
- GeoServer地图开发解决方案(二):地图数据处理篇
- rtx服务器端消息监控插件,RTX2006消息监控插件
- 用图片替代cursor光标样式
- k8s 自定义dns_配置k8s dns
- 52_LSTM及简介,RNN单元的内部结构,LSTM单元的内部结构,原理,遗忘门,输入门,输出门,LSTM变体GRU,LSTM变体FC-LSTM,Pytorch LSTM API介绍,案例(学习笔记)
- 泛微OA 任意文件上传漏洞
- java导出word文档(office,wps均可)
- Creo 工程图 尺寸 消失
- 转:优秀的人,往往都具备这5种视角
- 打开天正建筑显示服务器为空,打开天正提示找不到可用cad版本 - 卡饭网
- java 分层处理解耦_后端分层架构如何解耦?
- 移动硬盘无法被识别怎么办?
- CAD转Excel,该如何转换操作