网络爬虫之scrapy框架设置代理

前戏

os.environ()简介

os.environ()可以获取到当前进程的环境变量,注意,是当前进程。

如果我们在一个程序中设置了环境变量,另一个程序是无法获取设置的那个变量的。

环境变量是以一个字典的形式存在的,可以用字典的方法来取值或者设置值。

os.environ() key字段详解

windows:

os.environ[‘HOMEPATH‘]:当前用户主目录。
os.environ[‘TEMP‘]:临时目录路径。
os.environ[PATHEXT‘]:可执行文件。
os.environ[‘SYSTEMROOT‘]:系统主目录。
os.environ[‘LOGONSERVER‘]:机器名。
os.environ[‘PROMPT‘]:设置提示符。

linux:

os.environ[‘USER‘]:当前使用用户。
os.environ[‘LC_COLLATE‘]:路径扩展的结果排序时的字母顺序。
os.environ[‘SHELL‘]:使用shell的类型。
os.environ[‘LAN‘]:使用的语言。
os.environ[‘SSH_AUTH_SOCK‘]:ssh的执行路径。

内置的方式

原理

scrapy框架内部已经实现了设置代理的方法,它的原理是从环境变量中取出设置的代理,然后再使用,

所以我们只需要在程序执行前将代理以键值对的方式设置到环境变量中即可。

代码

第一种方式:直接添加键值对的方式

class ChoutiSpider(scrapy.Spider):
	name = ‘chouti‘
	allowed_domains = [‘chouti.com‘]
	start_urls = [‘https://dig.chouti.com/‘]
	cookie_dict = {}

	def start_requests(self):
		import os
		os.environ[‘HTTPS_PROXY‘] = "http://username:[email protected]:9999/"
		os.environ[‘HTTP_PROXY‘] = ‘19.11.2.32‘,
		for url in self.start_urls:
			yield Request(url=url,callback=self.parse)

第二种方式:设置meta参数的方式

class ChoutiSpider(scrapy.Spider):
	name = ‘chouti‘
	allowed_domains = [‘chouti.com‘]
	start_urls = [‘https://dig.chouti.com/‘]
	cookie_dict = {}

	def start_requests(self):
		for url in self.start_urls:
			yield Request(url=url,callback=self.parse,meta={‘proxy‘:‘"http://username:[email protected]:9999/"‘})

自定义方式

原理

我们可以根据内部实现的添加代理的类(中间件)的实现方法,来对它进行升级,比如内部的方式一次只能使用一个代理,

我们可以弄一个列表,装很多代理地址,然后随机选取一个代理,这样可以防止请求过多被封ip

代码

class ChoutiSpider(scrapy.Spider):
	name = ‘chouti‘
	allowed_domains = [‘chouti.com‘]
	start_urls = [‘https://dig.chouti.com/‘]
	cookie_dict = {}

	def start_requests(self):
		for url in self.start_urls:
			yield Request(url=url,callback=self.parse,meta={‘proxy‘:‘"http://username:[email protected]:9999/"‘})

			import base64
			import random
			from six.moves.urllib.parse import unquote
			try:
				from urllib2 import _parse_proxy
			except ImportError:
				from urllib.request import _parse_proxy
			from six.moves.urllib.parse import urlunparse
			from scrapy.utils.python import to_bytes

			class XXProxyMiddleware(object):

				def _basic_auth_header(self, username, password):
					user_pass = to_bytes(
						‘%s:%s‘ % (unquote(username), unquote(password)),
						encoding=‘latin-1‘)
					return base64.b64encode(user_pass).strip()

				def process_request(self, request, spider):
					PROXIES = [
						"http://username:[email protected]:9999/",
						"http://username:[email protected]:9999/",
						"http://username:[email protected]:9999/",
						"http://username:[email protected]:9999/",
						"http://username:[email protected]:9999/",
						"http://username:[email protected]:9999/",
					]
					url = random.choice(PROXIES)

					orig_type = ""
					proxy_type, user, password, hostport = _parse_proxy(url)
					proxy_url = urlunparse((proxy_type or orig_type, hostport, ‘‘, ‘‘, ‘‘, ‘‘))

					if user:
						creds = self._basic_auth_header(user, password)
					else:
						creds = None
					request.meta[‘proxy‘] = proxy_url
					if creds:
						request.headers[‘Proxy-Authorization‘] = b‘Basic ‘ + creds

写完类之后需要在settings文件里配置一下:

DOWNLOADER_MIDDLEWARES = {
   ‘spider.xxx.XXXProxyMiddleware‘: 543,
}

  

原文地址:https://www.cnblogs.com/jiangchunsheng/p/9255951.html

时间: 2024-11-10 14:58:35

网络爬虫之scrapy框架设置代理的相关文章

网络爬虫之scrapy框架详解,scrapy框架设置代理

twisted介绍 Twisted是用Python实现的基于事件驱动的网络引擎框架,scrapy正是依赖于twisted, 它是基于事件循环的异步非阻塞网络框架,可以实现爬虫的并发. twisted是什么以及和requests的区别: request是一个python实现的可以伪造浏览器发送Http请求的模块,它封装了socket发送请求 twisted是基于时间循环的异步非阻塞的网络框架,它也封装了socket发送请求,但是他可以单线程的完成并发请求. twisted的特点是: 非阻塞:不等待

Python网络爬虫之Scrapy框架(CrawlSpider)

目录 Python网络爬虫之Scrapy框架(CrawlSpider) CrawlSpider使用 爬取糗事百科糗图板块的所有页码数据 Python网络爬虫之Scrapy框架(CrawlSpider) 提问:如果想要通过爬虫程序去爬取"糗百"全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调parse方法). 方法二:基于CrawlSpider的自动爬取进行实现(更加简洁和高效). CrawlSpider使

爬虫学习 16.Python网络爬虫之Scrapy框架(CrawlSpider)

爬虫学习 16.Python网络爬虫之Scrapy框架(CrawlSpider) 引入 提问:如果想要通过爬虫程序去爬取"糗百"全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调parse方法). 方法二:基于CrawlSpider的自动爬取进行实现(更加简洁和高效). 今日概要 CrawlSpider简介 CrawlSpider使用 基于CrawlSpider爬虫文件的创建 链接提取器 规则解析器 今日详

scrapy框架设置代理

网易音乐在单ip请求下经常会遇到网页返回码503的情况经查询,503为单个ip请求流量超限,猜测是网易音乐的一种反扒方式因原音乐下载程序采用scrapy框架,所以需要在scrapy中通过代理的方式去解决此问题在scrapy中使用代理,有两种使用方式 1.使用中间件2.直接设置Request类的meta参数 下面依次简要说明下如何使用 方式一:使用中间件要进行下面两步操作 在文件 settings.py 中激活代理中间件ProxyMiddleware在文件 middlewares.py 中实现类P

Requests爬虫和scrapy框架多线程爬虫

1.基于Requests和BeautifulSoup的单线程爬虫 1.1 BeautifulSoup用法总结 1. find,获取匹配的第一个标签 tag = soup.find('a') print(tag) tag = soup.find(name='a', attrs={'class': 'sister'}, recursive=True, text='Lacie') tag = soup.find(name='a', class_='sister', recursive=True, te

爬虫之scrapy框架(一)

目录 一.scrapy简介,架构介绍 1.1scrapy简介 1.2架构介绍 1.3安装 命令行工具 二.scrapy创建项目及介绍 2.1项目创建 2.2目录介绍 2.3settings介绍 三.scrapy的数据解析(重点) 3.1css选择器 3.2xpath选择 四.scrapy的持久化存储(重点) 4.1持久化到文件 4.2持久化到数据库 一.scrapy简介,架构介绍 1.1scrapy简介 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的

python爬虫之scrapy框架

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. Scrapy 使用了 Twisted异步网络库来处理网络通讯.整体架构大致如下 Scrapy主要包括了以下组件: 引擎

5 爬虫之scrapy框架

一 scrapy框架简介 1 介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速.简单.可扩展的方式从网站中提取所需的数据.但目前Scrapy的用途十分广泛,可用于如数据挖掘.监测和自动化测试等领域,也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫.Scrapy 是基于twisted框架开发而来,twisted是一个流行的事件驱动的python网络框架.

【Scrapy框架设置UA池与代理池】 -- 2019-08-08 17:20:36

原创: http://106.13.73.98/__/142/ 先来张Scrapy框架图压压惊 下载中间件(Downloader Middlewares)是位于Scrapy引擎和下载器之间的一层组件. 它的作用是: 在引擎将请求传递给下载器的过程中,下载中间件可以对请求进行一系列的处理.比如设置User-Agent.设置代理IP等. 在下载器将Response传递给引擎的过程中,下载中间件可以对响应进行一系列的处理.比如进行gzip解压等. 下面将使用下载中间件来实现UA池与代理池 我们一般使用