一.爬虫伪装手段
(1)UA伪装
最初开始练习基础爬虫时,我们常常使用如下的语句直接对网站进行请求
r = requests.get(url=url)
通过这行简单的语句,我们依然能够从少数网页获取到内容,但大部分时候,我们将得到错误提示。
如下 我们直接使用该语句访问豆瓣
url = 'https://www.douban.com/'
response = requests.get(url)
print(response.status_code)
打印状态码为:
418
418状态码常被用作‘爬虫警告’,即我们由代码发起的访问身份被发觉。
我们打印爬虫请求头进行观察,'python-requests’是爬虫被察觉的主要原因。
"User-Agent": "python-requests/2.20.1"
此时使用UA伪装能够解决该问题。
UA:User-Agent 用户代理
headers = {
"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.33'
}
url = 'https://www.douban.com/'
response = requests.get(url=url, headers=headers)
print(response.status_code)
打印状态码为:
200
访问成功。
(2)随机休眠
利用上述伪装能够访问更多的网站,但因爬虫的访问速率与人类正常习惯不同。
一段时间的访问后,爬虫总是因其高频访问而被察觉,从而受到目标网站的拒绝。
r = requests.get(url=url, params=params, headers=headers)
t = random.randint(1, 5)
time.sleep(t)
为模拟人类行为,每次访问后随机暂停1至5秒,从而降低爬虫辩认度。
(3)IP代理
进行上述操作后,爬虫被察觉的可能性降低,
但当你短时间内需要进行大量的访问时,进行随机休眠可能会导致你的爬虫项目运行时间过长。
并且仍然存在被目标网站拒绝访问的可能。
我们知道,网站拒绝我们访问的方式,常常是限制我们计算机的IP,从而达到限制访问的结果。
IP封锁是指 防火墙 维护一张IP黑名单,一旦发现发往黑名单中地址的请求 数据包 ,就直接将其丢弃,这将导致源 主机 得不到目标主机的及时响应而引发超时,从而达到屏蔽对目标主机的访问的目的。
那么,我们使用其他IP对实际IP进行隐藏即可忽视这种对IP的封锁,
并且用于访问的IP地址的不断更换,降低了单个IP的访问频次,进一步提升了爬虫的隐蔽性。
匿名度 | 表现 |
透明度 | 服务器知道该次访问为匿名 且能够获取到真实IP |
匿名 | 服务器知道该次访问为匿名 不知道真实IP |
高匿 | 服务器误认为代理IP就是真实IP |
使用IP代理的方式很简单 将IP及其端口传入即可。
proxies = {
'https':'120.220.220.95:8085'
}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'}
response = requests.get(url=url,headers=headers,proxies=proxies)
但每次手动调整proxies并不便利,我们需要搭建代理IP池来更好地支撑我们的工作。