Scrapy的中间件Downloader Middleware实现User-Agent随机切换

Scrapy的中间件Downloader Middleware实现User-Agent随机切换_第1张图片
Scrapy

如何实现随机更换User-Agent

这里要做的是通过自己在Downlaoder Middleware中定义一个类来实现随机更换User-Agent,但是我们需要知道的是scrapy其实本身提供了一个user-agent这个我们在源码中可以看到如下图:


Scrapy的中间件Downloader Middleware实现User-Agent随机切换_第2张图片
目录

源码:

Scrapy的中间件Downloader Middleware实现User-Agent随机切换_第3张图片

从源代码中可以知道,默认scrapy的user_agent=‘Scrapy’,并且这里在这个类里有一个类方法from_crawler会从settings里获取USER_AGENT这个配置,如果settings配置文件中没有配置,则会采用默认的Scrapy,process_request方法会在请求头中设置User-Agent.

关于随机切换User-Agent的库

github地址为:https://github.com/hellysmile/fake-useragent

安装:pip install fake-useragent

基本的使用例子:


Scrapy的中间件Downloader Middleware实现User-Agent随机切换_第4张图片

这里我们可以获取我们想要的常用的User-Agent,并且这里提供了一个random方法可以直接随机获取,上述代码的结果为:


关于配置和代码

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


Scrapy的中间件Downloader Middleware实现User-Agent随机切换_第5张图片

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

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


Scrapy的中间件Downloader Middleware实现User-Agent随机切换_第6张图片

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

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实现User-Agent随机切换)