全网最全!Python爬虫requests库教程(附案例)_python requests

本文详细介绍了Python爬虫中requests库的使用,包括如何携带Cookie、设置请求头、模拟登陆、POST请求、处理响应等内容,通过案例展示了如何在实际爬虫项目中操作Cookie和处理网页内容。
摘要由CSDN通过智能技术生成

“user-agent”: ’Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (
KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36’,

从浏览器中复制过来的Cookie

“cookie”: ’xxx这里是复制过来的cookie字符串’}

请求头参数字典中携带cookie字符串

response = requests.get(’https://www.zhihu.com/creator’, headers=headers)
data = re.findall(’CreatorHomeAnalyticsDataItem-title.*?>(.*?)’,response.text)
print(response.status_code)
print(data)


当我们不携带 Cookies 进行请求时:



import requests
import re
headers = {“user-agent”: ’Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit
/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36’}
response = requests.get(’https://www.zhihu.com/creator’, headers=headers)
data = re.findall(’CreatorHomeAnalyticsDataItem-title.*?>(.*?)’,response.text)
print(response.status_code)
print(data)


200


[]


在打印的输出结果中为空 , 两者对比 , 则成功利用 headers 参数携带 cookie ,获取登陆后才能访问的页面!


#### 2.4.3 cookies 参数的使用


上一小节我们在headers参数中携带cookie ,也可以使用专门的cookies参数。


❖ 1. cookies 参数的形式:字典


cookies = “cookie 的 name”:“cookie 的 value”


➢ 该字典对应请求头中 Cookie 字符串,以分号、空格分割每一对字典键值对


➢ 等号左边的是一个 cookie 的 name ,对应 cookies 字典的 key


➢ 等号右边对应 cookies 字典的 value


❖ 2.cookies 参数的使用方法


response = requests.get(url, cookies)


❖ 3. 将 cookie 字符串转换为 cookies 参数所需的字典:


cookies\_dict = { cookie . split ( ’=’ ) [ 0 ]: cookie . split ( ’=’ ) [- 1 ] for cookie in


cookies\_str . split ( ’; ’ ) }


❖ 4. 注意:cookie 一般是有过期时间的,一旦过期需要重新获取



response = requests.get(url, cookies)
import requests
import re
url = ’https://www.zhihu.com/creator’
cookies_str = ’复制的cookies’
headers = {“user-agent”: ’Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit
/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36’}
cookies_dict = {cookie.split(’=’, 1)[0]:cookie.split(’=’, 1)[-1] for cookie in
cookies_str.split(’; ’)}

请求头参数字典中携带cookie字符串

resp = requests.get(url, headers=headers, cookies=cookies_dict)
data = re.findall(’CreatorHomeAnalyticsDataItem-title.*?>(.*?)’,resp.text)
print(resp.status_code)
print(data)


200


[ ’python 中该怎么把这种 id 不同但是 class 相同的方法写成一个整合呀?’ , ’ 父母没有能力给我买电脑的钱,我该怎么办?’ , ’ 一句话形容一下你现在的生活状态?’ ]


#### 2.4.4 构造RequestsCookieJar对象进行cookies设置


在这里我们还可以通过构造 RequestsCookieJar 对象进行 cookies 设置 , 示例代码如下:



import requests
import re
url = ’https://www.zhihu.com/creator’
cookies_str = ’复制的cookies’
headers = {“user-agent”: ’Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit
/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36’}
jar = requests.cookies.RequestsCookieJar()
for cookie in cookies_str.split(’;’):
key,value = cookie.split(’=’,1)
jar. set(key,value)

请求头参数字典中携带cookie字符串

resp = requests.get(url, headers=headers, cookies=jar)
data = re.findall(’CreatorHomeAnalyticsDataItem-title.*?>(.*?)’,resp.text)
print(resp.status_code)
print(data)


200


[ ’python 中该怎么把这种 id 不同但是 class 相同的方法写成一个整合呀?’ , ’ 父母没有能力给我买电脑的钱,我该怎么办?’ , ’ 一句话形容一下你现在的生活状态?’ ]


这里我们首先新建了一个RequestCookieJar对象,然后将复制下来的cookies利用split() 方法分剖,接着利用 set()方法设置好每个Cookie的key和value,然后通过调用 requests的get()方 法并传递给cookies参数即可。


当然,由于知乎本身的限制, headers参数也不能少,只不过不需要在原来的 headers 参数里面设置 cookie 字段了。测试后,发现同样可以正常登录知乎。


#### 2.4.5 cookieJar 对象转换为 cookies 字典的方法


使用 requests 获取的 resposne 对象,具有 cookies 属性。该属性值是一个 cookieJar 类型,包含了对方服务器设置在本地的 cookie 。我们如何将其转换为 cookies 字典呢?


❖ 1. 转换方法


cookies\_dict = requests.utils.dict\_from\_cookiejar(response.cookies)


❖ 2. 其中 response.cookies 返回的就是 cookieJar 类型的对象


❖ 3. requests.utils.dict\_from\_cookiejar 函数返回 cookies 字典



import requests
import re
url = ‘https://www.zhihu.com/creator’
cookies_str = ‘复制的cookies’
headers = {“user-agent”: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit
/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36’}
cookie_dict = {cookie.split(‘=’, 1)[0]:cookie.split(‘=’, 1)[-1] for cookie in
cookies_str.split('; ')}

请求头参数字典中携带cookie字符串

resp = requests.get(url, headers=headers, cookies=cookies_dict)
data = re.findall(‘CreatorHomeAnalyticsDataItem-title.*?>(.*?)’,resp.text)
print(resp.status_code)
print(data)

可以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值