全国协议5人面授小班,企业级独立开发考核,转业者的IT软件工程师基地 登录/注册 | 如何报名
当前位置: Python   >  爬虫和反爬虫
admin · 更新于 2021-08-06

1. 反爬虫常见方式:

  • 请求头识别

这是一种最基本的反爬虫方式,网站运营者通过验证爬虫的请求头的 User-agent,accep-enconding 等信息来验证请求的发出宿主是不是真实的用户常用浏览器或者一些特定的请求头信息。

  • 动态加载

通过 Ajax,或 者Javascript 来动态获取和加载数据,加大爬虫直接获取数据的难度。

  • 验证码

这个相信大多数读者非常熟悉了吧,当我们输错多次密码的时候,很多平台都会弹出各种二维码让我们识别,或者抢火车票的时候,会出现各种复杂的验证码,验证码是反爬虫措施中,运用最广,同时也是最有效直接的方式来阻止爬虫的措施之一。

  • 限制IP

在识别到某些异常的访问的时候,网站运营者会设置一个黑名单,把一些判定为爬虫的IP进行限制或者封杀。

  • 账号限制

有些网站,没有游客模式,只有通过注册后才可以登录看到内容,这个就是典型的使用账号限制网站,一般可以用在网站用户量不多,数据安全要求严格的网站中。

2. 反反爬虫策略:

  • 更改 UserAgent

我们可以在请求头中替换我们的请求媒介,让网站误认为是我们是通过移动端的访问,运行下面的代码后,当我们打开 hupu.html,我们会发现返回的是移动端的虎扑的页面而不是网页端的。

import requestsfrom bs4 import BeautifulSoup

header_data = {'User-Agent': 'Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; SCH-I535 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30'}re = requests.get('https://www.hupu.com/', headers=header_data)bs = BeautifulSoup(re.content)with open('hupu.html', 'wb') as f:
    f.write(bs.prettify(encoding='utf8'))
代码块
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 减少爬取频率,设置间隔时间

比如,我们可以设置一个随机的间隔时间,来模拟用户的行为,减少访问的次数和频率。
我们可以在我们爬虫的程序中,加入如下的代码,让爬虫休息3秒左右,再进行爬取,可以有效地避开网站的对爬虫的检测和识别。

import timeimport random

sleep_time = random.randint(0.,2) + random.random()time.sleep(sleep_time)
代码块
  • 1
  • 2
  • 3
  • 4
  • 5
  • 运用代理机制

代理就是通过访问第三方的机器,然后通过第三方机器的 IP 进行访问,来隐藏自己的真实IP地址。

import requests

link = "http://www.baidu.com/"proxies = {'http':'XXXXXXXXXXX'} //代理地址,可以自己上网查找,这里就不做推荐了
response = requests.get(link, proxies=proxies)
代码块
  • 1
  • 2
  • 3
  • 4
  • 5

由于第三方代理良莠不齐,而且不稳定,经常出现断线的情况,爬取速度也会慢许多,如果对爬虫质量有严格要求的话,不建议使用此种方法进行爬取。

  • 变换IP进行爬取

可以通过动态的 IP 拨号服务器来变换 IP,也可以通过 Tor 代理服务器来变换 IP。

小结

反反爬虫的策略,一直是在变换的,我们应该具体问题具体分析,通过不断的试错来完善我们的爬虫爬取,千万不要以为,爬虫程序在本机调试之后,没有问题,就可以高枕无忧了。线上的问题,总是千变万化,我们需要根据我们的具体反爬措施,来针对的写一些反反爬虫的代码,这样才能保证线上环境的万无一失。


为什么选择汉码未来