美文网首页
Scrapy的中间件Downloader Middleware实

Scrapy的中间件Downloader Middleware实

作者: 拾柒丶_8257 | 来源:发表于2018-11-20 14:25 被阅读0次

    这里我找了一个之前写好的爬虫,然后实现随机更换User-Agent,在settings配置文件如下:

    DOWNLOADER_MIDDLEWARES = {

    'jobboleSpider.middlewares.RandomUserAgentMiddleware':543,

    'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware':None,

    }

    RANDOM_UA_TYPE='random'

    这里我们要将系统的UserAgent中间件设置为None,这样就不会启用,否则默认系统的这个中间会被启用

    定义RANDOM_UA_TYPE这个是设置一个默认的值,如果这里不设置我们会在代码中进行设置,在middleares.py中添加如下代码:

    classRandomUserAgentMiddleware(object):

    '''

        随机更换User-Agent

        '''

    def__init__(self,crawler):

            super(RandomUserAgentMiddleware, self).__init__()

            self.ua = UserAgent()

    self.ua_type = crawler.settings.get('RANDOM_UA_TYPE','random')

        @classmethod

    deffrom_crawler(cls,crawler):

    returncls(crawler)

    defprocess_request(self,request,spider):

    defget_ua():

    returngetattr(self.ua,self.ua_type)

    request.headers.setdefault('User-Agent',get_ua())

    上述代码的一个简单分析描述:

    1. 通过crawler.settings.get来获取配置文件中的配置,如果没有配置则默认是random,如果配置了ie或者chrome等就会获取到相应的配置

    2. 在process_request方法中我们嵌套了一个get_ua方法,get_ua其实就是为了执行ua.ua_type,但是这里无法使用self.ua.self.us_type,所以利用了getattr方法来直接获取,最后通过request.heasers.setdefault来设置User-Agent

    通过上面的配置我们就实现了每次请求随机更换User-Agent

    相关文章

      网友评论

          本文标题:Scrapy的中间件Downloader Middleware实

          本文链接:https://www.haomeiwen.com/subject/njxxqqtx.html