scrapy设置代理的方法
根据最新的scrapy官方文档,scrapy爬虫框架的代理配置有以下两种方法:
1.使用中间件DownloaderMiddleware进行配置
在settings.py文件中,找到DOWNLOADER_MIDDLEWARES它是专门用来用配置scrapy的中间件.我们可以在这里进行自己爬虫中间键的配置,配置后如下:
DOWNLOADER_MIDDLEWARES = {'WandoujiaCrawler.middlewares.ProxyMiddleware': 100,
}
其中WandoujiaCrawler是我们的项目名称,后面的数字代表中间件执行的优先级。
官方文档中默认proxy中间件的优先级编号是750,我们的中间件优先级要高于默认的proxy中间键。
中间件middlewares.py的写法如下(scrapy默认会在这个文件中写好一个中间件的模板,不用管它写在后面即可):
# -*- coding: utf-8 -*-
class ProxyMiddleware(object):def process_request(self, request, spider):request.meta['proxy'] = "http://proxy.yourproxy:8001"
这里有两个注意的问题:
1.是proxy一定是要写成 http:// 前缀,否则会出现to_bytes must receive a unicode, str or bytes object, got NoneType的错误.
2.是官方文档中写到process_request方法一定要返回request对象,response对象或None的一种,但是其实写的时候不用return,乱写可能会报错。另外如果代理有用户名密码等就需要在后面再加上一些内容:
# Use the following lines if your proxy requires authentication
proxy_user_pass = "USERNAME:PASSWORD"
# setup basic authentication for the proxy
encoded_user_pass = base64.encodestring(proxy_user_pass)
request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass
此处配置参考:
http://www.pythontab.com/html/2014/pythonweb_0326/724.html
2.直接在爬虫程序中设置proxy字段
我们可以直接在自己具体的爬虫程序中设置proxy字段,代码如下,直接在构造Request里面加上meta字段即可:
class QuotesSpider(scrapy.Spider):name = "quotes"def start_requests(self):urls = ['http://quotes.toscrape.com/page/1/','http://quotes.toscrape.com/page/2/',]for url in urls:yield scrapy.Request(url=url, callback=self.parse, meta={'proxy': 'http://proxy.yourproxy:8001'})def parse(self, response):for quote in response.css('div.quote'):yield {'text': quote.css('span.text::text').extract_first(),'author': quote.css('span small::text').extract_first(),'tags': quote.css('div.tags a.tag::text').extract(),}
3:通过内置的环境变量
这是在我们的start_request里面,代码如下:(该方法比较low ,不推荐使用)
def start_requests(self):# 这里是代理ipimport osos.environ["HTTPS_PROXY"] = '37.187.149.129:1080'os.environ["HTTP_PROXY"] = '202.29.212.213:443'# 重写了start_requests一定要重写这个不然不能爬取了。#方法一:#for url in self.start_urls:# yield Request(url=url)# 方法二:request_list = []for url in self.start_urls:request_list.append(Request(url=url))return request_list
提示一下:meta的优先级要高于环境变量的。
scrapy设置代理的方法相关推荐
- Centos7中设置代理的方法
在使用局域网时,有时在局域网内只有一台电脑可以进行上网,其他电脑只能通过配置代理的方式来上网,在Windows系统中设置代理上网相对简单,如果只需上网的话,只需在浏览器中找到网络连接,然后在局域网设置 ...
- Python scrapy设置代理ip
应用scrapy爬虫的时候,经常遇到ip被封的问题,直接导致无法获取数据,所以要使用代理ip. 在网上有很多大神写的案例,我选择了一个进行使用,不知道是ip的原因还是我写的有问题,还是会报错,但是思路 ...
- java中各种使用设置代理的方法
1.http代理 package main.java.com.example; import org.apache.http.HttpHost; import org.apache.http.clie ...
- python中设置代理的方法
1.设置http和https代理 import requests import time from fake_useragent import UserAgent if __name__ == '__ ...
- python 代理使用方法简介
目录 1. 获取代理 2. Urllib 3. Requests 4. Selenium Chrome PhantomJS 下面我们来梳理一下这些库的代理的设置方法. 1. 获取代理 在做测试之前,我 ...
- postforobject 设置代理_OAuth2RestTemplate中的代理配置
我需要使用由OAuth2保护的API.为此我使用OAuth2RestTemplate. 但我得到以下错误: java.net.ConnectException: Connection timed ou ...
- python全局代理_Python3 中代理使用方法总结
作者:崔庆才 请勿转载 配套免费视频教程:Python3爬虫三大案例实战分享:猫眼电影.今日头条街拍美图.淘宝美食 Python3爬虫三大案例实战分享 爬取知乎所有用户详细信息 https://edu ...
- 夜神安卓模拟器怎么设置代理
app开发测试的同学为了调试方便,通常会在电脑上装一些android模拟器,开多台进行测试.调试中通常要干的一件事就是抓取,那么想要抓包,我们必须要设置代理. 夜神模拟器设置代理的方法: 1. 点击t ...
- iOS 设置代理详细步骤
//设置代理 和方法 属性 @protocol detailNoteProtocol <NSObject]]> - (void)aa; @end //声明代理属性 @property ( ...
最新文章
- AI“生死”落地:谁有资格入选AI Top 30+案例?
- 31页PPT概述:图神经网络表达能力有多强?
- 创业公司CEO每天应该做的13件事
- java datetime和date_Java 8时间接口localDateTime和Date的对比
- a标签中href=javacript:; href=javacript:void(0); href=#区别
- 介绍一个有趣的网站 - 历史上的今天
- .net httpwebrequest 并发慢_go语言并发之MPG模型
- ezmorph-1.0.6.jar的作用
- 使用 SYSENTER 和 SYSEXIT 指令执行对系统过程的快速调用
- pycharm汉化版安装
- 【Python】Python解释器
- VUE(7) : vue-element-admin[7] : json编辑器
- JS代码简单一段即可破解QQ空间删除说说
- 进销存管理系统源码VS2015
- visio如何使箭头指向图中的任意位置
- 晶体晶振小结(XTAL与TCXO/VCXO/VC-OCXO等)-持续更新
- Aspose word 转换为pdf 排版错位和数据丢失
- 电脑使用android手机摄像头,电脑怎么使用安卓手机摄像头 电脑使用手机摄像头的方法...
- 进击的Libra:路在何方?中国应如何应对?
- android强行打开软键盘,隐藏Android软键盘(如果已打开)