爬虫过程中的反爬措施非常重要,其中设置随机 User-Agent 是一项重要的反爬措施,Scrapy 中设置随机 UA 的方式有很多种,有的复杂有的简单。
1.常规设置 UA
首先,说一下常规情况不使用 Scrapy 时的用法,比较方便的方法是利用 fake_useragent包,这个包内置大量的 UA 可以随机替换,这比自己去搜集罗列要方便很多,下面来看一下如何操作。
首先,安装好fake_useragent包,一行代码搞定:
pip install fake-useragent
然后,就可以测试了:
from fake_useragent import UserAgent
ua = UserAgent()
for i in range(10):
print(ua.random)
2.middlewares.py 中设置 UA(推荐使用,质量高)
这种方法是在 settings.py 文件中手动添加一些 UA,然后通过 random.choise 方法随机调用,即可生成 UA,这种方便比较麻烦的就是需要自己去找 UA,而且增加了代码行数量。
代码如下:
from scrapy.downloadermiddlewares.useragent import UserAgentMiddleware
import random
class RandomUserAgentMiddleware(UserAgentMiddleware):
"""
自动随机更换UA
"""
def __init__(self, user_agent_list):
super(RandomUserAgentMiddleware, self).__init__()
self.user_agent_list = user_agent_list
@classmethod
def from_crawler(cls, crawler):
return cls(
user_agent_list=crawler.settings.get('USER_AGENT')
)
def process_request(self, request, spider):
random_user_agent = random.choice(self.user_agent_list)
request.headers.setdefault('User-Agent', random_user_agent)
然后,我们回到 settings.py 文件中调用自定义的 UserAgent,注意这里要先关闭默认的 UA 设置方法才行。
DOWNLOADER_MIDDLEWARES = {
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
'pachong.middlewares.common_download_middlewares.RandomUserAgentMiddleware': 450,
# 'pachong.middlewares.common_download_middlewares.ProxyMiddleware': 700
}