一般情况下,我们在编写爬虫的时候都会不停的更换用户代理,这样就可以降低被ban掉的风险。在scrapy中,默认会给我们一个user-agent,这明显是不可以直接拿来用的,所以,我们需要修改这一部分,以便每个request对象在交给下载器之前,都会随机获取一个标准浏览器的user-agent,尽最大可能的模拟真实用户的请求。
具体实现是通过request对象的headers属性,以及自定义一个downloadmiddleware。
具体的实现代码如下:
class MyCustomHeadersDownLoadMiddleware(object):
def __init__(self, user_agent_list):
self.user_agent = user_agent_list
@classmethod
def from_crawler(cls, crawler, *args, **kwargs):
middleware = cls(crawler.settings.get('MY_USER_AGENT'))
return middleware
def process_request(self, request, spider):