网络爬虫规则 Requests 库实战

网络爬虫规则 Requests 库实战

1. 实验目标

Requests入门

2. 实验主要使用的 𝑃𝑦𝑡ℎ𝑜𝑛Python 库

名称版本简介
𝑟𝑒𝑞𝑢𝑒𝑠𝑡𝑠requests2.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 会覆盖掉全局的配置。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无心 码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值