根据最新的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设置代理的方法相关推荐

  1. Centos7中设置代理的方法

    在使用局域网时,有时在局域网内只有一台电脑可以进行上网,其他电脑只能通过配置代理的方式来上网,在Windows系统中设置代理上网相对简单,如果只需上网的话,只需在浏览器中找到网络连接,然后在局域网设置 ...

  2. Python scrapy设置代理ip

    应用scrapy爬虫的时候,经常遇到ip被封的问题,直接导致无法获取数据,所以要使用代理ip. 在网上有很多大神写的案例,我选择了一个进行使用,不知道是ip的原因还是我写的有问题,还是会报错,但是思路 ...

  3. java中各种使用设置代理的方法

    1.http代理 package main.java.com.example; import org.apache.http.HttpHost; import org.apache.http.clie ...

  4. python中设置代理的方法

    1.设置http和https代理 import requests import time from fake_useragent import UserAgent if __name__ == '__ ...

  5. python 代理使用方法简介

    目录 1. 获取代理 2. Urllib 3. Requests 4. Selenium Chrome PhantomJS 下面我们来梳理一下这些库的代理的设置方法. 1. 获取代理 在做测试之前,我 ...

  6. postforobject 设置代理_OAuth2RestTemplate中的代理配置

    我需要使用由OAuth2保护的API.为此我使用OAuth2RestTemplate. 但我得到以下错误: java.net.ConnectException: Connection timed ou ...

  7. python全局代理_Python3 中代理使用方法总结

    作者:崔庆才 请勿转载 配套免费视频教程:Python3爬虫三大案例实战分享:猫眼电影.今日头条街拍美图.淘宝美食 Python3爬虫三大案例实战分享 爬取知乎所有用户详细信息 https://edu ...

  8. 夜神安卓模拟器怎么设置代理

    app开发测试的同学为了调试方便,通常会在电脑上装一些android模拟器,开多台进行测试.调试中通常要干的一件事就是抓取,那么想要抓包,我们必须要设置代理. 夜神模拟器设置代理的方法: 1. 点击t ...

  9. iOS 设置代理详细步骤

    //设置代理 和方法  属性 @protocol detailNoteProtocol <NSObject]]> - (void)aa; @end //声明代理属性 @property ( ...

最新文章

  1. AI“生死”落地:谁有资格入选AI Top 30+案例?
  2. 31页PPT概述:图神经网络表达能力有多强?
  3. 创业公司CEO每天应该做的13件事
  4. java datetime和date_Java 8时间接口localDateTime和Date的对比
  5. a标签中href=javacript:; href=javacript:void(0); href=#区别
  6. 介绍一个有趣的网站 - 历史上的今天
  7. .net httpwebrequest 并发慢_go语言并发之MPG模型
  8. ezmorph-1.0.6.jar的作用
  9. 使用 SYSENTER 和 SYSEXIT 指令执行对系统过程的快速调用
  10. pycharm汉化版安装
  11. 【Python】Python解释器
  12. VUE(7) : vue-element-admin[7] : json编辑器
  13. JS代码简单一段即可破解QQ空间删除说说
  14. 进销存管理系统源码VS2015
  15. visio如何使箭头指向图中的任意位置
  16. 晶体晶振小结(XTAL与TCXO/VCXO/VC-OCXO等)-持续更新
  17. Aspose word 转换为pdf 排版错位和数据丢失
  18. 电脑使用android手机摄像头,电脑怎么使用安卓手机摄像头 电脑使用手机摄像头的方法...
  19. 进击的Libra:路在何方?中国应如何应对?
  20. android强行打开软键盘,隐藏Android软键盘(如果已打开)

热门文章

  1. mongodb java连接 集群_java连接mongodb集群
  2. 互联网协议套件(TCP/IP)及七层OSI模型
  3. Laravel深入学习10 - 里氏替换原则
  4. gradient渐变IE兼容处理
  5. weblogic与sitemesh乱码问题
  6. 提高网站的性能----回流与重绘
  7. sql 存储过程中top 后面跟参数的问题
  8. AIX系统卸载oracle
  9. Dispatcher initialization failed解决办法
  10. RouterOS V2.9.27 固定IP双电信分流教程(详)