爬虫中的反爬技术 – 先懂反爬再应对反爬

温馨提示: 本文最后更新于2024-11-12 11:48:05,某些文章具有时效性,若有错误或已失效,请在下方 留言或联系 梦幻屋

7.1、常见的反爬

爬虫像一只虫子,密密麻麻地爬行到每一个角落获取数据,虫子或许无害,但总是不受欢迎的。

因为爬虫技术造成的大量IP访问网站侵占带宽资源、以及用户隐私和知识产权等危害,很多互联网企业都会花大力气进行“反爬虫”。

你的爬虫会遭遇比如被网站封IP、比如各种奇怪的验证码、userAgent访问限制、各种动态加载、post请求参数动态变化、禁止页面调试等都有可能出现

常见的反爬虫措施有:

  • 登录验证、验证码、滑块
  • 登录请求参数token
  • 通过Headers反爬虫
  • 基于用户行为反爬虫
  • 基于动态页面的反爬虫
  • 字体反爬
  • …….

7.2、基本的反反爬

反反爬的主要思路:尽可能的去模拟浏览器,浏览器在如何操作,代码中就如何去实现。

7.1、请求头:User-agent

这是个很常见的,不做过多阐述,如下,这是我访问某某网站的,然后图上标注的就是user-agent

爬虫中的反爬技术 – 先懂反爬再应对反爬-梦魂博客

具体使用如下:

In [1]:

import requests
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36'}

res = requests.get(url='https://www.baidu.com/', headers=headers)

在这里的User-Agent可以使用多个随机的,意识就是假如你请求20次,你可以自己构造多个不同的User-Agent随机使用一次不重样的,防止过于频繁,这也是常见的方式。

那么多的User-Agent要怎么收集呢?

1、这里有个库: fake-useragent

我们可以使用fake-useragent库来实现随机更换User-Agent

pip install fake-useragent

2、自行从这个网站收集: http://useragent.kuzhazha.com/

3、自行构建,如下

In [2]:

import random

def get_ua():
    first_num = random.randint(55, 62)
    third_num = random.randint(0, 3200)
    fourth_num = random.randint(0, 140)
    os_type = [
        '(Windows NT 6.1; WOW64)', '(Windows NT 10.0; WOW64)', '(X11; Linux x86_64)',
        '(Macintosh; Intel Mac OS X 10_12_6)'
    ]
    chrome_version = 'Chrome/{}.0.{}.{}'.format(first_num, third_num, fourth_num)

    ua = ' '.join(['Mozilla/5.0', random.choice(os_type), 'AppleWebKit/537.36',
                   '(KHTML, like Gecko)', chrome_version, 'Safari/537.36']
                  )
    return ua

print(get_ua())
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.2221.119 Safari/537.36

7.2、 通过referer字段或者是其他字段来反爬

反爬原理:爬虫默认情况下不会带上referer字段
解决方法:添加referer字段

7.3、通过cookie来反爬

如果目标网站不需要登录 每次请求带上前一次返回的cookie,比如requests模块的session 如果目标网站需要登录,
则准备多个账号,通过一个程序获取账号对应的cookie,组成cookie池,其他程序使用这些cookie

爬虫中的反爬技术 – 先懂反爬再应对反爬-梦魂博客

假设你的程序携带了cookie,过段时间访问出现问题,一般是cookie失效,那么这个时候就需要重新登录去获取cookie,有的cookie的有效时间可能是一天或者一天以上;还有种可能就是当你用这个cookie请求数据的同时,有人用了相同的账号登录网站,那么此时你的请求就会出现问题,这种情况就是cookie的唯一性

7.4、通过js来反爬

普通的爬虫默认情况下无法执行js,获取js执行之后的结果,所以很多时候对方服务器会通过js的技术实现反爬

7.4.1 通过js实现禁止调试

如这个网站:当我们调试这个网站就会出现如下的情况,无法去调试

爬虫中的反爬技术 – 先懂反爬再应对反爬-梦魂博客

面对这种情况我们可以试用如下的方式,找到debug的函数,禁止调用它,我们就可以正常调试了

爬虫中的反爬技术 – 先懂反爬再应对反爬-梦魂博客
爬虫中的反爬技术 – 先懂反爬再应对反爬-梦魂博客

类似的解决方法也有很多,也可以通过抓包去截取js文件,改写js文件,并重新注入该网站,已到达我们的改写目的

7.4.2 通过js生成了请求参数

反爬原理:js生成了请求参数

像这种情况是目前最常见的反爬技术,也是爬虫走向中高阶的必备之路,像前面的七麦网站就是这种情况

爬虫中的反爬技术 – 先懂反爬再应对反爬-梦魂博客

解决方法:分析js,观察加密的实现过程,这里就涉及到js逆向的知识了,或者使用selenium动态加载来实现,但这种方法局限性很大

7.4.3 通过js实现了数据的加密

反爬原理:js实现了数据的加密

爬虫中的反爬技术 – 先懂反爬再应对反爬-梦魂博客

解决方法:分析js,观察加密的实现过程,通过js2py获取js的执行结果,或者使用selenium来实现

7.5、通过验证码来反爬

反爬原理:对方服务器通过弹出验证码强制验证用户浏览行为

解决方法:打码平台或者是机器学习的方法识别验证码,其中打码平台廉价易用,更值得推荐,不过如果是遇到简单的数字验证码或者滑块都是可以自行去解决的

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容