一、middlewares.py源代码:

  1. # -*- coding: utf-8 -*-
  2. # 导入随机模块
  3. import random
  4. # 导入有关IP池有关的模块
  5. from scrapy.contrib.downloadermiddleware.httpproxy import HttpProxyMiddleware
  6. # 导入有关用户代理有关的模块
  7. from scrapy.contrib.downloadermiddleware.useragent import UserAgentMiddleware
  8.  
  9. # IP池
  10. class HTTPPROXY(HttpProxyMiddleware):
  11. # 初始化 注意一定是 ip=''
  12. def __init__(self, ip=''):
  13. self.ip = ip
  14.  
  15. def process_request(self, request, spider):
  16. item = random.choice(IPPOOL)
  17. print("当前的IP是:"+item["ipaddr"])
  18. request.meta["proxy"] = "http://"+item["ipaddr"]
  19.  
  20. # 设置IP池
  21. IPPOOL = [
  22. {"ipaddr": "182.117.102.10:8118"},
  23. {"ipaddr": "121.31.102.215:8123"},
  24. {"ipaddr": "1222.94.128.49:8118"}
  25. ]
  26.  
  27. # 用户代理
  28. class USERAGENT(UserAgentMiddleware):
  29. #初始化 注意一定是 user_agent=''
  30. def __init__(self, user_agent=''):
  31. self.user_agent = user_agent
  32.  
  33. def process_request(self, request, spider):
  34. item = random.choice(UPPOOL)
  35. try:
  36. print("当前的User-Agent是:"+item)
  37. request.headers.setdefault('User-Agent', item)
  38. except Exception as e:
  39. print(e)
  40. pass
  41.  
  42. # 设置用户代理池
  43. UPPOOL = [
  44. "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393"
  45. ]

二、settings.py文件设置,添加下面代码:

  1. #==============================================
  2.  
  3. # 禁止Cookie
  4. COOKIES_ENABLED = False
  5.  
  6. # 下载中间件指向
  7. DOWNLOADER_MIDDLEWARES = {
  8. # 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware':123,
  9. # '工程名.middlewares.HTTPPROXY' : 125,
  10. 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': 2,
  11. '工程名.middlewares.USERAGENT': 1
  12. }
  13.  
  14. # 管道指向
  15. ITEM_PIPELINES = {
  16. '工程名.pipelines.管道中对应的类名': 300,
  17. }
  18.  
  19. # 注意将Obey robots关闭(上面已经开启了,所以需要找到并设置为False)
  20. ROBOTSTXT_OBEY = False
  21.  
  22. #==============================================

三、总结一些需要的东西

1.在引入(有关IP池有关的和关用户代理的)模块是注意这个

  1. # 导入有关IP池有关的模块
  2. from scrapy.contrib.downloadermiddleware.httpproxy import HttpProxyMiddleware
  3. # 导入有关用户代理有关的模块
  4. from scrapy.contrib.downloadermiddleware.useragent import UserAgentMiddleware

"contrib"不能丢了

2.配置下载中间件的连接信息时,注意文件指向,也就是调用类的指向

3.“.”表示这一级目录,".."表示上一级目录

封装IP池和用户代理相应的类(python3)的更多相关文章

  1. 在Scrapy中使用IP池或用户代理更新版(python3)

    middlewares.py # -*- coding: utf-8 -*- # 导入随机模块 import random # 导入有关IP池有关的模块 from scrapy.downloaderm ...

  2. 在Scrapy中使用IP池或用户代理(python3)

    一.创建Scrapy工程 scrapy startproject 工程名 二.进入工程目录,根据爬虫模板生成爬虫文件 scrapy genspider -l # 查看可用模板 scrapy gensp ...

  3. python爬虫实战(三)--------搜狗微信文章(IP代理池和用户代理池设定----scrapy)

    在学习scrapy爬虫框架中,肯定会涉及到IP代理池和User-Agent池的设定,规避网站的反爬. 这两天在看一个关于搜狗微信文章爬取的视频,里面有讲到ip代理池和用户代理池,在此结合自身的所了解的 ...

  4. Python爬虫代理IP池

    目录[-] 1.问题 2.代理池设计 3.代码模块 4.安装 5.使用 6.最后 在公司做分布式深网爬虫,搭建了一套稳定的代理池服务,为上千个爬虫提供有效的代理,保证各个爬虫拿到的都是对应网站有效的代 ...

  5. selenium、UA池、ip池、scrapy-redis的综合应用案例

    案例: 网易新闻的爬取: https://news.163.com/ 爬取的内容为一下4大板块中的新闻内容 爬取: 特点: 动态加载数据  ,用 selenium 爬虫 1. 创建项目 scrapy ...

  6. java爬虫进阶 —— ip池使用,iframe嵌套,异步访问破解

    写之前稍微说一下我对爬与反爬关系的理解 一.什么是爬虫      爬虫英文是splider,也就是蜘蛛的意思,web网络爬虫系统的功能是下载网页数据,进行所需数据的采集.主体也就是根据开始的超链接,下 ...

  7. k8s西游记 - 切换网络插件IP池

    前言 最近在另一个k8s集群中,搭建了kong网关,在配置OIDC插件时,希望使用Memcahe代替Cookie来存储会话信息,于是把部署在同一局域网Memcahe的内网IP,比如:192.168.1 ...

  8. Python爬虫 | IP池的使用

    一.简介 - 爬虫中为什么需要使用代理 一些网站会有相应的反爬虫措施,例如很多网站会检测某一段时间某个IP的访问次数,如果访问频率太快以至于看起来不像正常访客,它可能就会禁止这个IP的访问.所以我们需 ...

  9. UA池 代理IP池 scrapy的下载中间件

    # 一些概念 - 在scrapy中如何给所有的请求对象尽可能多的设置不一样的请求载体身份标识 - UA池,process_request(request) - 在scrapy中如何给发生异常的请求设置 ...

随机推荐

  1. C#光盘刻录

    一.背景介绍 最近公司一个老项目需要添加导出数据到光盘的功能.开始对这功能添加有点抵触的.光盘?都啥年代了. 光盘一种即将淘汰的存储媒介.就像当年的随身听,Mp3,Mp4一样,即将退出历史舞台.领导让 ...

  2. js中formData的使用

    FormData 对象的使用 https://developer.mozilla.org/zh-CN/docs/Web/API/FormData/Using_FormData_Objects http ...

  3. applicationCache

    <html manifest="/m.appcache"> window.applicationCache.onupdateready = function (e) { ...

  4. overflow知多少

    本文地址: http://www.hicss.net/some-overflow-knowledge/ 最近在研究OOCSS,当打开template.css阅读第一行时,震惊了,第一眼居然没看懂... ...

  5. 在CentOS7系统上执行Scala脚本

    在类Unix系统上,可以在scala文件中开头第一行指定脚本的解释程序.如下例: Script.scala #!/usr/bin/env scala println("Hello" ...

  6. C#实现的自定义IIS认证模块 转载

    IIS7以后application pool都支持两种模式:经典模式和集成模式. 所谓经典模式就是与IIS6的application pool运行模式相同,对于asp.net的页面请求处理由单独的as ...

  7. JSP中out.write()和out.print()的区别

    out对象的类型是JspWriter.JspWriter继承了java.io.Writer类. 1)print方法是子类JspWriter,write是Writer类中定义的方法: 2)重载的prin ...

  8. lantin1

    Latin1是ISO-8859-1的别名,有些环境下写作Latin-1. ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCI ...

  9. Powershell对象条件查询筛选

    在 Windows PowerShell 中,与所需的对象数量相比,通常生成的对象数量以及要传递给管道的对象数量要多得多.可以使用 Format cmdlet 来指定要显示的特定对象的属性,但这并不能 ...

  10. java web 打水印

    /** * 把图片印刷到图片上 * * @param pressImg -- * 水印文件 * @param targetinp -- * 目标文件 * @param x * --x坐标 * @par ...