Download middleware list below
['scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware',
'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware',
'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware',
'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware',
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware',
'scrapy.downloadermiddlewares.retry.RetryMiddleware',
'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware',
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware',
'scrapy.downloadermiddlewares.redirect.RedirectMiddleware',
'scrapy.downloadermiddlewares.cookies.CookiesMiddleware',
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware',
'scrapy.downloadermiddlewares.stats.DownloaderStats']
Downloader middleware four functions
from_crawler (cls, crawler) configuration function
process_reuquest processing request
processing the response process_response
When an exception occurs trigger process_exception
Random handover user_agent
from faker import Faker
class MySpiderMiddleware(object):
def __init__(self):
self.fake = Faker()
def process_request(self,request,spider):
request.headers.setdefault('User-Agent',self.fake.user_agent())
= {DOWNLOADER_MIDDLEWARES
# 'middle.middlewares.MyCustomDownloaderMiddleware': 543,
'middle.middlewares.MySpiderMiddleware': 100,
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
}
the first embodiment in the configuration setting configuration inside, I did not tested, in the end has been randomly selected one or a random each request
USER_AGENT_LIST=[ 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36' "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24" ] USER_AGENT = random.choice(USER_AGENT_LIST)
The second way to write its own randomUseragent enabled middleware and setting inside, but to change the order of the front, such as 100 or directly enabled by default is set to None user_agent
The third way is the direct successor to the default userAgent middleware, then rewriting method
Middleware can be achieved with a faker or a list can also trick yourself
def process_request(self,request,spider): request.headers.setdefault('User-Agent',self.fake.user_agent())