爬虫之深入了解requests库

yuyalinnb   ·   发表于 2022-11-08 21:51:00   ·   技术文章

0x00 前言

阅读时间:15分钟左右
上一期讲了requests库的简单使用,这一期我会讲解requests库的更多实用的方法。
小知识点:
网站可以爬或不可以爬的东西会写在robots.txt里。比如:

0x01 requests库响应对象的其他常用属性和方法

了解即可,不常用
response.url 响应的url


response.status_code 响应状态码


requests.headers 响应头

  1. {'Server': 'nginx', 'Date': 'Tue, 08 Nov 2022 11:51:02 GMT', 'Content-Type': 'text/html; charset=UTF-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Vary': 'Accept-Encoding', 'X-Powered-By': 'Track', 'Content-Encoding': 'gzip'}

requests.cookies 响应中携带的cookie

0x02 在请求中携带请求头

1、为什么要加headers

当你不加参数requests.get()时,给他抓个包,你就会发现它ua那一行是python,很多网站不允许,于是我们可以修改ua,达到反反爬的目的。

2、在哪里找你自己的ua

右键-》检查-》网络-》刷新-》找到最上面那个包-》在请求头里找到ua(往下拉)

3、在代码中实现

通常我们用字典的方式传入参数,这是上次的例子

  1. import requests #导入请求库
  2. headers = {
  3. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0'
  4. }#用字典的方式保存
  5. url = 'https://www.zhihu.com/'
  6. r = requests.get(url,headers=headers) #响应包
  7. print(r.content.decode())#以utf8解码

0x03 如何在请求中携带参数

1、直接请求url

这里以百度为例,众所周知,百度有很多没什么用的参数,我们只要一个参数,就是s=wd这个。

  1. import requests
  2. headers = {
  3. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0'
  4. }
  5. url = 'https://www.baidu.com/s?wd=a'
  6. r = requests.get(url,headers=headers)
  7. print(r.content.decode())#

2、使用params参数

挺简单的,和headers没什么区别,也是用一个字典,然后加个参数就行了

  1. import requests
  2. url = 'https://www.baidu.com/'
  3. params = {'wd': 'abc'}
  4. headers = {
  5. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0'
  6. }
  7. r = requests.get(url,headers=headers,params=params)
  8. print(r.content.decode)

这里就不写注释了,前面都有

0x04 headers参数中携带cookie(github实例)

1、为什么要携带cookie

网站中常用cookie来保持用户的登录状态,github也一样。

2、在哪里找你自己的cookie

右键-》检查-》网络-》刷新-》找到最上面那个包-》在请求头里找到cookie(往下拉)

3、在代码中实现

首先登陆github账号,然后访问一个只有登陆后才能访问的网址,比如:


这个时候我们在爬虫中就要加入在请求头中加入cookie
上代码:

  1. import requests
  2. url = 'https://github.com/Ccbuaoye'
  3. headers = {
  4. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0'
  5. 'Cookie': '你自己的cookie值'
  6. }
  7. response = requests.get(url,headers=headers)
  8. print(response)

0x05 cookies参数

1、为什么?

因为有两种加cookie的方法,这里只是介绍另一种。

2、cookies在哪?

同上,一个东西

3、如何在代码中实现?

首先,和参数一样,来一个字典

  1. cookies = {"name","value"}

然后传入参数

  1. response = requests.get(url,cookies)

注意事项:cookies是有有效期的,一旦过期需要重新加载。

4、其他

还有些:比如cookieJar,spilt这种,有点难懂,就不放在这里了。

0x06 超时设置

1、为什么?

众所周知,响应需要时间,但是响应时间太久就是出问题了,而如果不设置超时参数,你的爬虫不会报错,这很影响效率,所以我们一般回家这个参数

2、怎么加?

timeout=你要的数值,一般是三秒

  1. import requests
  2. url = 'https://twitter.com'
  3. response = requests.get(url, timeout=3)
  4. # 超过三秒未建立链接 则跑出报错

推特肯定是访问不到的,除非科学上网。

0x07 proxies参数

1、为什么?

因为可以绕过一些防护,获得更多的数据,以及获得匿名性

2、代理的分类

透明代理:没卵用,没有匿名性
高匿代理:毫无疑问,最好的代理
http代理:目标是http协议
https代理:目标是https协议

3、怎么找代理?

搜索高匿代理(毕竟是免费的,很多都不能用,你要是有钱可以买)
这里推荐:
https://www.kuaidaili.com/free/
下一期单独写一个代理池,就是定期采集免费的代理存储的玩意

4、怎么在代码中实现

没错,还是字典的形式

  1. proxies = {
  2. 'http': 'http://12.34.56.78:1234'
  3. 'https': 'https://12.34.56.78:1234'
  4. }
  5. response = requests.get(url,proxies=proxies)
  6. print(response)

0x08 忽略CA证书

1、CA证书是什么?

看看这个东西,你应该遇到过
(随便找的一张图,侵联删)

原因:该网站的证书未经过认证

2、要是爬到了这种站怎么办?

那还能怎么办,上参数!
verify参数,可以用来屏蔽ca证书

3、在代码中实现

  1. response = requests.get(url,verify=False)

0x09 Session类

1、什么时候用?

多次使用cookie的时候用

2、在代码中实现

  1. seeion = requests.session() #实例化session对象
  2. response = session.get()

它会自动帮我们处理cookie,而且session也能发送get请求,和之前的requests差不多。

  1. response = session.get(url,headers)

0x09 后记

第一次写这么长的文章

用户名金币积分时间理由
Track-劲夫 60.00 0 2022-11-11 15:03:03 一个受益终生的帖子~~

打赏我,让我更有动力~

2 条回复   |  直到 2022-11-17 | 546 次浏览

Track-劲夫
发表于 2022-11-11

加油啊

评论列表

  • 加载数据中...

编写评论内容

Carry
发表于 2022-11-17

师傅我可以转发你的文章吗 标明出处

评论列表

  • 加载数据中...

编写评论内容
登录后才可发表内容
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.