网络爬虫规则 Requests 库实战
1. 实验目标
Requests入门
2. 实验主要使用的 𝑃𝑦𝑡ℎ𝑜𝑛Python 库¶
名称 | 版本 | 简介 |
---|---|---|
𝑟𝑒𝑞𝑢𝑒𝑠𝑡𝑠requests | 2.23.02.23.0 | 数据采集 |
4. 实验步骤
步骤1 基本GET请求
之前我们介绍了 requests 库的基本只是和简单使用,这个作为入门的工具还是不错的,对了解一些爬虫的基本理念,掌握爬虫爬取的流程有所帮助。入门之后,我们就需要学习一些更加高级的内容和工具来方便我们的爬取。那么本实验实战一下 requests 库的基本用法。
最基本的GET请求可以直接用get方法
r = requests.get("http://httpbin.org/get")
如果想要加参数,可以利用 params 参数
代码示例:
# 安装第三方库
pip install requests==2.23.0
代码示例:
import requests
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get("http://httpbin.org/get", params=payload)
print(r.url)
如果想请求JSON文件,可以利用 json() 方法解析
例如自己请求 http://httpbin.org/json 这个URL,返回一个 JSON 结果,利用如下程序请求并解析:
代码示例:
r = requests.get("http://httpbin.org/json")
print(r.text)
print(r.json())
观察运行结果,其中一个是直接输出内容,另外一个方法是利用 json() 方法解析,感受下它们的不同。
如果想添加 headers,可以传 headers 参数:
代码示例:
payload = {'key1': 'value1', 'key2': 'value2'}
headers = {'content-type': 'application/json'}
r = requests.get("http://httpbin.org/get", params=payload, headers=headers)
print(r.url)
通过headers参数可以增加请求头中的headers信息
步骤2 基本POST请求
对于 POST 请求来说,我们一般需要为它增加一些参数。那么最基本的传参方法可以利用 data 这个参数。
代码示例:
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post("http://httpbin.org/post", data=payload)
print(r.text)
可以看到参数传成功了,然后服务器返回了我们传的数据。
有时候我们需要传送的信息不是表单形式的,需要我们传JSON格式的数据过去,所以我们可以用 json.dumps() 方法把表单数据序列化。
步骤3 Cookies
如果一个响应中包含了cookie,那么我们可以利用 cookies 变量来拿到
import requests
url = 'http://example.com'
r = requests.get(url)
print(r.cookies)
以上程序仅是样例,可以用 cookies 变量来得到站点的 cookies
另外可以利用 cookies 变量来向服务器发送 cookies 信息
代码示例:
url = 'http://httpbin.org/cookies'
cookies = dict(cookies_are='working')
r = requests.get(url, cookies=cookies)
print(r.text)
已经成功向服务器发送了 cookies
步骤4 超时配置
可以利用 timeout 变量来配置最大请求时间
requests.get('http://github.com', timeout=0.001)
注:timeout 仅对连接过程有效,与响应体的下载无关。
也就是说,这个时间只限制请求的时间。即使返回的 response 包含很大内容,下载需要一定时间,与这个超时配置无关。
步骤5 会话对象
在以上的请求中,每次请求其实都相当于发起了一个新的请求。也就是相当于我们每个请求都用了不同的浏览器单独打开的效果。也就是它并不是指的一个会话,即使请求的是同一个网址。 在一些站点中,我们需要保持一个持久的会话怎么办呢?就像用一个浏览器逛淘宝一样,在不同的选项卡之间跳转,这样其实就是建立了一个长久会话。解决方案如下:
代码示例:
s = requests.Session()
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
r = s.get("http://httpbin.org/cookies")
print(r.text)
在这里我们请求了两次,一次是设置 cookies,一次是获得 cookies
观察运行结果,发现可以成功获取到 cookies 了,这就是建立一个会话到作用。体会一下。
那么既然会话是一个全局的变量,那么我们肯定可以用来全局的配置了。
代码示例:
s = requests.Session()
s.headers.update({'x-test': 'true'})
r = s.get('http://httpbin.org/headers', headers={'x-test2': 'true'})
print(r.text)
注意:通过 s.headers.update 方法设置了 headers 的变量。然后我们又在请求中设置了一个 headers,那么两个变量都传送过去,并且通过 get() 方法传的 headers 会覆盖掉全局的配置。