摘抄自Python

一、随机user-agent 的设置

关于配置和代码

这里我找了一个之前写好的爬虫,然后实现随机更换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中添加如下代码:

class RandomUserAgentMiddleware(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
def from_crawler(cls,crawler):
return cls(crawler) def process_request(self,request,spider): def get_ua():
return getattr(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

最新文章

  1. 基于mini2440的Tslib的移植
  2. 对于for的一些认识
  3. easyui datagrid 多行删除问题
  4. grunt 执行
  5. 使用HttpURLConnection下载文件时出现 java.io.FileNotFoundException彻底解决办法
  6. 关于Team Leader
  7. 如何用C程序简单演奏乐曲
  8. Android Studio新手全然指引
  9. mssql中得到当天数据的语句
  10. 经验36--C#无名(大事,物...)
  11. Python实现字典的key和values的交换
  12. .NET西安社区 [拥抱开源,又见 .NET] 第二次活动简报
  13. java命令--jstat 工具使用
  14. SQL中IN和EXISTS用法的区别
  15. 解决idea控制台乱码及项目乱码
  16. 【题解】 bzoj2115: [Wc2011] Xor (线性基+dfs)
  17. Python爬虫学习系列教程
  18. YAML 语言教程(转载)
  19. linux中C语言发送广播报文
  20. 2018.09.23 bzoj1076: [SCOI2008]奖励关(期望+状压dp)

热门文章

  1. 「Linux+Django」uwsgi服务启动(start)停止(stop)重新装载(reload)
  2. jinja2 中的 Template 批量替换json字符串中的内容
  3. 利用Zynq Soc创建一个嵌入式工程
  4. 前端PHP入门-011-可变函数
  5. OpenCV---色彩空间(一)
  6. Spring Boot 使用IntelliJ IDEA创建一个web开发实例(二)
  7. ① 设计模式的艺术-07.适配器(Adapter)模式
  8. 微信小程序开发(二)创建小程序
  9. select多选框
  10. CodeForces - 1015D