我们在scrapy项目中,修改请求时的User-Agent可以有两种方法:一种时修改settings里面的USER-AGENT变量;第二种是通过Downloader Middleware的proscss_request()方法来修改。
第一种方法非常简单,我们只需要在setting.py里面加USER-AGENT的定义即可:
USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'
一般推荐使用此方法来设置。但是如果想设置得更加灵活 ,比如设置随机User-Agent,那就需要借助Downloader Middleware了,所以接下来我们用Downloader Middleware实现一个随机User-Agent的设置。
第二种方式:
在middlewares.py里面设置添加一个RandomUserAgentMiddleware的类,如下所示:
import random
class RandomUserAgentMiddleware():
def __init__(self):
self.user_agent=[
'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.2 (KHTML, like Gecko) Chrome/22.0.1216.0 Safari/537.2',
'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0.1'
]
def process_request(self,request,spider):
request.headers['User-Agent']=random.choice(self.user_agent)
首先在类的__init__()方法中定义了,二个不同的User-Agent,并用一个列表来表示,接下来实现来process_request()的方法,有一个参数是request,我们可以直接修改requst的属性即可,在这里我们直接设置request对象的headers属性的User-Agent,设置内容是随机选择的User-Agent,这样一个Downloader MiddleWare就写好了。
不过,要使之生效我们还需要再去调这个DownloaderMiddleware。在setting.py中,将DOWNLOADER_MIDDLEWARES取消注释,并设置成如下内容:
DOWNLOADER_MIDDLEWARES = {'scrapydownloadertest.middlewares.RandomUserAgentMiddleware': 543,}
这样我们就通过实现Downloader Middleware并利用process_request()方法成功设置了随机的User-Agent。