middlewares.py
1.数据需要selenium解析后才能呈现
# middlewares.py from scrapy import signals import scrapy from selenium import webdriver from selenium.webdriver.chrome.options import Options import time class ChromedriverMiddleware(object): def process_request(self, request, spider): chrome_options = Options() chrome_options.add_argument('--headless') # 使用无头谷歌浏览器模式 chrome_options.add_argument('--disable-gpu') chrome_options.add_argument('--no-sandbox') # 指定谷歌浏览器路径 self.driver = webdriver.Chrome(chrome_options=chrome_options, executable_path='/root/zx/spider/driver/chromedriver') if request.url != 'https://www.aqistudy.cn/historydata/': self.driver.get(request.url) time.sleep(1) html = self.driver.page_source self.driver.quit() return scrapy.http.HtmlResponse(url=request.url, body=html.encode('utf-8'), encoding='utf-8', request=request) # setting.py DOWNLOADER_MIDDLEWARES = { 'driver.middlewares.ChromedriverMiddleware': 543, }
2.使用代理
# middlewares.py from scrapy.utils.python import to_bytes import base64 class ProxyMiddleware(object): def process_request(self, request, spider): # 全部请求都使用代理 PROXIES = [ {'ip_port': '111.11.228.75:80', 'user_pass': 'root@123456'}, {'ip_port': '120.198.243.22:80', 'user_pass': 'root@123456'}, {'ip_port': '111.8.60.9:8123', 'user_pass': 'root@123456'}, {'ip_port': '101.71.27.120:80', 'user_pass': 'root@123456'}, {'ip_port': '122.96.59.104:80', 'user_pass': 'root@123456'}, {'ip_port': '122.224.249.122:8088', 'user_pass': 'root@123456'}, ] proxy = random.choice(PROXIES) if proxy['user_pass'] is not None: request.meta['proxy'] = to_bytes("http://%s" % proxy['ip_port']) encoded_user_pass = base64.b64encode(to_bytes(proxy['user_pass'])) request.headers['Proxy-Authorization'] = to_bytes('Basic ' + encoded_user_pass) else: request.meta['proxy'] = to_bytes("http://%s" % proxy['ip_port']) def process_exception(self, request, response, spider): # 请求报错是执行代理 def process_request(self, request, spider): PROXIES = [ {'ip_port': '111.11.228.75:80', 'user_pass': 'root@123456'}, {'ip_port': '120.198.243.22:80', 'user_pass': 'root@123456'}, {'ip_port': '111.8.60.9:8123', 'user_pass': 'root@123456'}, {'ip_port': '101.71.27.120:80', 'user_pass': 'root@123456'}, {'ip_port': '122.96.59.104:80', 'user_pass': 'root@123456'}, {'ip_port': '122.224.249.122:8088', 'user_pass': 'root@123456'}, ] proxy = random.choice(PROXIES) if proxy['user_pass'] is not None: request.meta['proxy'] = to_bytes("http://%s" % proxy['ip_port']) encoded_user_pass = base64.b64encode(to_bytes(proxy['user_pass'])) request.headers['Proxy-Authorization'] = to_bytes('Basic ' + encoded_user_pass) else: request.meta['proxy'] = to_bytes("http://%s" % proxy['ip_port']) # setting.py DOWNLOADER_MIDDLEWARES = { 'driver.middlewares.ProxyMiddleware': 543, # 设置不参与scrapy的自动重试的动作 请求出错时才使用代理 'scrapy.downloadermiddlewares.retry.RetryMiddleware': None } # 禁止重试 RETRY_ENABLED = False # 下载超时 DOWNLOAD_TIMEOUT = 10 # 下载重试次数 RETRY_TIMES=5 # spider.py 在请求中使用代理 yield scrapy.FormRequest(self.start_url, method="POST", formdata=self.form_data,meta={'proxy':"http://59.44.247.194:9797"}) # proxy_pool 设置代理 class MyproxiesSpiderMiddleware(object): def process_request(self, request, spider): proxies = requests.get('http://127.0.0.1:5000/get').content.decode('utf-8') print(proxies) if 'pool' in proxies: time.sleep(80) print('没有可用的的代理,等60秒') proxies = requests.get('http://127.0.0.1:5000/get').content.decode('utf-8') request.meta["proxy"] = "http://{}".format(proxies) else: request.meta["proxy"] = "http://{}".format(proxies) # request.meta["proxy"] = "http://36.249.49.43:9999"
middlewares.py的更多相关文章
- Scrapy框架: middlewares.py设置
# -*- coding: utf-8 -*- # Define here the models for your spider middleware # # See documentation in ...
- 爬虫框架Scrapy之Downloader Middlewares
反反爬虫相关机制 Some websites implement certain measures to prevent bots from crawling them, with varying d ...
- Scrapy爬虫框架(2)--内置py文件
Scrapy概念图 这里有很多py文件,分别与Scrapy的各个模块对应 superspider是一个爬虫项目 spider1.py则是一个创建好的爬虫文件,爬取资源返回url和数据 items.py ...
- Python爬虫Scrapy框架入门(2)
本文是跟着大神博客,尝试从网站上爬一堆东西,一堆你懂得的东西 附上原创链接: http://www.cnblogs.com/qiyeboy/p/5428240.html 基本思路是,查看网页元素,填写 ...
- scrapy爬虫框架入门实例(一)
流程分析 抓取内容(百度贴吧:网络爬虫吧) 页面: http://tieba.baidu.com/f?kw=%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB&ie=ut ...
- scrapy 代理
说明: 本文参照了官网文档,以及stackoverflow的几个问题 概要: 在scrapy中使用代理,有两种使用方式 使用中间件 直接设置Request类的meta参数 方式一:使用中间件 要进行下 ...
- 如何让你的scrapy爬虫不再被ban
前面用scrapy编写爬虫抓取了自己博客的内容并保存成json格式的数据(scrapy爬虫成长日记之创建工程-抽取数据-保存为json格式的数据)和写入数据库(scrapy爬虫成长日记之将抓取内容写入 ...
- python爬虫之Scrapy 使用代理配置
转载自:http://www.python_tab.com/html/2014/pythonweb_0326/724.html 在爬取网站内容的时候,最常遇到的问题是:网站对IP有限制,会有防抓取功能 ...
- Win10环境下的Scrapy结合Tor进行匿名爬取
本文内容来源:http://blog.privatenode.in/torifying-scrapy-project-on-ubuntu/ 在使用Scrapy的时候,一旦进行高频率的爬取就容易被封IP ...
随机推荐
- python xlwt写入excel操作
引用https://www.cnblogs.com/python-robot/p/9958352.html 安装 $ pip install xlwt 例子: import xlwt # 创建一个wo ...
- 删除Word中出现的空白页
删除Word中出现的空白页 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ Word中出现空白页,怎么删都删不掉,Backspace与Delete键不管 ...
- 201871010116-祁英红《面向对象程序设计(java)》第八周学习总结
项目 内容 <面向对象程序设计(java)> https://home.cnblogs.com/u/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.c ...
- LeetCode 5365. 可被三整除的最大和 Greatest Sum Divisible by Three
地址 https://www.acwing.com/solution/leetcode/content/6340/ 题目描述给你一个整数数组 nums,请你找出并返回能被三整除的元素最大和. 示例 : ...
- efk
准备三台虚拟机 都安装 zookeeper kafka kafka01 192.168.202.131 +elasticsearch + kibana kafka02 192.168.2 ...
- C语言程序设计100例之(2):一元二次方程
例2 一元二次方程 [题目描述] 输入系数a.b和c,求方程ax2+bx+c=0的根. [输入格式] 输入数据有多组.每组数据包括三个系数a,b,c.当a=0时,输入数据结束. [输出格式] 输出 ...
- Unity TextMeshPro 一键生成工具
本文参考了这片博客文章,在此基础上进行优化和改进: https://blog.csdn.net/akof1314/article/details/80868869 先截张效果图: TextMeshPr ...
- 解决centos下tomcat启动太慢 & JDBC连接oracle太慢的问题
近期遇到一个非常奇怪的问题,也不知道改了什么,tomcat启动非常慢,以前几秒就启动好了,现在要30秒左右. 而且,通过jdbc连接oracle数据库也非常慢,以前建立一个连接只要几十毫秒,现在也要1 ...
- url中拼接中文参数,后台接收为乱码的问题
遇到在URL中拼接中文的参数,后台拿到的数据为乱码的问题,这里来说一下问题出现的原因与解决方法. 大家比较关心的应该是解决的方法,因此先说解决方法. 解决方法 解决的方法是在客户端对这个中文参数进行编 ...
- python3的reload(sys)
import sys reload(sys) sys.setdefaultencoding(‘utf-8’) 以上是python2的写法,但是在python3中这个需要已经不存在了,这么做也不会什么实 ...