爬虫:我们为了获取任何信息而采用任何手段对某一网站进行的“攻击”行为,之所以称之为“攻击”行为,是因为我们对网站的爬虫过程会对网站造成不同程度的影响。而爬虫与我们手动点击抄取最重要的区别在于:批量。
反爬虫:网站为了维护自己的核心安全而采取的抑制爬虫的手段,反爬虫的手段有很多种,今儿在这儿我记录分享几个我在爬虫过程中遇到的反扒机制,并简单将反反爬虫的解决方法介绍一下。
思想:服务器后台对访问的User_Agent进行统计,单位时间内同一User_Agent访问的次数超过特定的阀值,则会被不同程度的封禁IP,从而造成无法进行爬虫的状况。
我提供给大家两种方案,
方案一:
将常见的User-Agent封装到一个.py文件中,命名为useragent.py
# 列表存储不同的User-Agent,这里仅示例三个,详情可百度百度搜索,链接在代码下方
ua_list = ['Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1',
'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0',
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3)'
]
他人为我们总结的常用User-Agent获取链接:https://www.cnblogs.com/zrmw/p/9332801.html
在爬虫过程中导入useragent.py文件,随机选择ua_list中的user-agent。
代码示例:
import random
# 导入自己定义的useragents.py中的ua_list
from .useragents import ua_list
#随机获取User-Agent
headers = {'User-Agent':random.choice(ua_list)}
req = request.Request(
url='https://...',
headers=headers
)
方法二:
Python中加载fake_useragent库,随机生成User-Agent添加到headers中。
代码示例:
from fake_useragent import UserAgent
# 测试fake-useragent
ua = UserAgent()
print(ua.random)
思想:后台服务器对访问进行统计,单位时间内同一IP访问的次数超过一个特定的值(阀值),就会不同程度的禁封IP,导致无法进行爬虫操作。
使用不同的IP地址进行访问,设置一定的访问时滞,例:random.sleep(3)。
本文分享给大家一种常见的方法,基于西刺代理购买的专业代理构建可用代理池。经常爬虫的伙伴应该对西刺代理并不陌生,可以免费或花钱购买可用的IP地址,但是怎么说呢,免费的很多都不能用,(其实收费的也有很多不能用,所以感觉有点小坑。)
西刺代理网址:https://www.xicidaili.com/
构建代理池方法在我的上一篇文章中有详细的介绍,再次不再赘述,不多BB,附上链接:https://blog.csdn.net/a18612039484/article/details/99821226
思想:当我们进入某个网页时,我们想通过查看源代码解析页面结构,看到的内容却不是我们网页显示的内容;或者,在我们浏览网站时网页结构显示不全,只有滑动鼠标时才能将剩余的信息显示出来,我们就需要靠手动抓包来解析不同。
打开页面 -> 查看网页源码 -> 搜索关键字,发现搜索不到,这其实就是我们所说的动态页面。此时,按F12,刷新页面,在network的左侧一栏可以找到多个包,查看headers中的request-url,此时滚动鼠标或其他方式查看页面的另一条数据,方法相同,查看request-url,对比两个url的不同点,发现规律。
再进行爬虫是你访问的url就不是网页主页的url而是你发现规律后的request-url了。
爬取豆瓣电影时的Headers设置:
import requests
class DoubanSpider(object):
def __init__(self):
# 抓包获得的request-url
self.url = 'https://movie.douban.com/j/chart/top_list?' \
'type=11&interval_id=100%3A90&action=&' \
'start=0&limit={}'
self.headers = {
'Accept': '*/*',
# 慎用: 是否支持压缩,浏览器会自动解压缩,程序不会
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Cookie': 'll="108288"; bid=aSBSguls21o; _pk_ref.100001.4cf6=%5B%22%22%2C%22%22%2C1563869922%2C%22https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DLhtlEVPyxYNpp0kQ0G_fAgW99F63tVN1zdWjjykcgmRItkxMvsmebYYNiiG8xSfz%26wd%3D%26eqid%3Df4a20ed0000c68d1000000035d36c2dc%22%5D; _pk_ses.100001.4cf6=*; ap_v=0,6.0; __utma=30149280.294047153.1563869922.1563869922.1563869922.1; __utmb=30149280.0.10.1563869922; __utmc=30149280; __utmz=30149280.1563869922.1.1.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; __utma=223695111.1049979206.1563869922.1563869922.1563869922.1; __utmb=223695111.0.10.1563869922; __utmc=223695111; __utmz=223695111.1563869922.1.1.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; __yadk_uid=2yqEFWFrvkTDxxdzao2zxhhN2aA00YLX; _vwo_uuid_v2=DFCF0832EDBDC20E4B00BA861174082E8|6dde682338779ea97188011aa0abe344; _pk_id.100001.4cf6=cc5a01a84b5030df.1563869922.1.1563873081.1563869922.',
'Host': 'movie.douban.com',
'Referer': 'https://movie.douban.com/typerank?type_name=%E7%88%B1%E6%83%85&type=13&interval_id=100:90&action=',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest',
}
今天先写到这里,主要分享了基于User-Agent、IP和动态页面反扒机制和相应的反反扒方法。下一篇再多多介绍一些基于Headers中cookie等反扒、对关键参数进行加密反扒、页面重定向反扒等小细节吧~ 拜拜!