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

[ ’ 西安回民街有什么好吃的?’ , ’ 西安有哪些值得逛的宝藏店铺?’ , ’ 西安哪些商圈承载着你的青春?’ , ’ 你有哪些好的驾驶习惯可以分享?’ , ’ 有哪些只有经验丰富的司机才知道的驾驶技巧?’ , ’ 有车的注意了,这些开车知识每个人都要掌握,关键时刻能救命 ’ , ’ 欢迎着陆!知乎宇宙成员招募通告’ , ’ 星球登陆问题:给你十块钱穿越到未来,怎样才能混得风生水起?’ , ’ 星球登陆问题:知乎宇宙中的「超能量」你最希望拥有哪一种?你会如何使用它?’ , ’ 挪威三文鱼,原产地至关重要 ’ , ’ 挪威最吸引人的地方有哪些?’ , ’ 生活在挪威是一种 什么体验?’ , ’ 如何看待京东方 AMOLED 柔性屏量产?未来前景如何?’ , ’ 柔性屏能不能给手机行业带来革命性的影响?’ , ’ 什么是超薄可弯曲柔性电池?会对智能手机的续航产生重大影响吗?’ , ’ 美术零基础怎样才能学好美术,在艺考中取得高分?’ , ’ 清华美院被鄙视吗 ?’ , ’ 艺术生真的很差吗?’ , ’ 人应该怎样过这一生?’ , ’ 人的一生到底该追求什么?’ , ’ 人类知道世界的终极真理后会疯掉吗?’ , ’ 焦虑是因为自己能力不够吗?’ , ’ 社交恐惧症是怎样的一种体验?’ , ’ “忙起来你就没时间抑郁了”这句话有理么?’ ]

这里我们加入了 headers 信息,其中包含了 User-Agent 字段信息,也就是浏览器标识信息。如果不加这个,知乎会禁止抓取。

抓取二进制数据在上面的例子中,我们抓取的是知乎的一个页面,实际上它返回的是一个 HTML 文档。

如果想抓去图片、音频、视频等文件,应该怎么办呢?图片、音频、视频这些文件本质上都是由二进制码组成的,由于有特定的保存格式和对应的解析方式,我们才可以看到这些形形色色的多媒体。

所以,想要抓取它们,就要拿到它们的二进制码。下面以 GitHub的站点图标为例来看一下:

import requests  
response = requests.get("https://github.com/favicon.ico")  
with  
open(’github.ico’, ’wb’) as f:  
f.write(response.content)  


Response对象的两个属性,一个是 text, 另一个是 content. 其中前者表示字符串类型文本,后者表示 bytes 类型数据 , 同样地,音频和视频文件也可以用这种方法获取。

2.4 在Headers参数中携带cookie

网站经常利用请求头中的 Cookie 字段来做用户访问状态的保持,那么我们可以在 headers 参数中添加 Cookie ,模拟普通用户的请求。

2.4.1 Cookies 的获取

为了能够通过爬虫获取到登录后的页面,或者是解决通过 cookie 的反爬,需要使用 request 来处理 cookie 相关的请求:

import requests  
url = ’https://www.baidu.com’  
req = requests.get(url)  
print(req.cookies)  
# 响应的cookies 
for key, value in req.cookies.items():  
print(f"{key} = {value}") 

<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>

BDORZ = 27315

这里我们首先调用 cookies 属性即可成功得到 Cookies ,可以发现它是 RequestCookieJar 类型。然后用 items() 方法将其转化为元组组成的列表,遍历输出每一个 Cookie 的名称和值,实现 Cookie 的遍历解析。

2.4.2 携带 Cookies 登录

带上 cookie 、 session 的好处 :能够请求到登录之后的页面。

带上 cookie 、 session 的弊端:一套 cookie 和 session 往往和一个用户对应请求太快,请求次数太多,容易被服务器识别为爬虫。

不需要 cookie 的时候尽量不去使用 cookie 但是为了获取登录之后的页面, 我们必须发送带有 cookies 的请求 我们可以直接用 Cookie 来维持登录状态 , 下面以知乎为例来说明。首先登录知乎,将 Headers 中的 Cookie 内容复制下来。

➢ 从浏览器中复制 User-Agent 和 Cookie

➢ 浏览器中的请求头字段和值与 headers 参数中必须一致

➢ headers 请求参数字典中的 Cookie 键对应的值是字符串

import requests  
import re  
# 构造请求头字典 
headers = {  
# 从浏览器中复制过来的User-Agent 
"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.\*?>(.\*?)</div>’,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.\*?>(.\*?)</div>’,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.\*?>(.\*?)</div>’,resp.text) 
  • 21
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值