当前位置:首页 > CN2资讯 > 正文内容

Scrapy设置代理scrapy 代理

12小时前CN2资讯

设置代理的位置:下载中间件

一、内置代理(优点:简单,缺点:只能代理一个ip)

1、源码分析

 process_request(self, request, spider)在下载器执行前执行

if scheme in self.proxies: self._set_proxy(request, scheme)

_set_proxy方法(设置代理)->self.proxies[scheme]->self.proxies = {} (__init__)->getproxies()->getproxies_environment->return proxies

环境变量

os.environ = {

  "HTTP_PROXY": "192.169.1.1",

  "HTTPS_PROXY": "1.1.1.1",

  "HTTPS": '10.10.10.10'

}

通过getproxies_environmen方法的处理

proxies = {

  'http': "192.169.1.1",

  'https': "1.1.1.1",

}

加()执行

getproxies() = proxies

for type_, url in getproxies().items(): self.proxies[type_] = self._get_proxy(url, type_)

_get_proxy(url, type_) 处理代理用用户密码的情况,如下->return creds, proxy_url

getproxies() = {

  'http': "http://用户名:密码@192.169.1.1:端口",

  'https': "1.1.1.1",  

}

self.proxies = {

  'http': ("basic 用户名密码加密后的值", 192.168.1.1:端口),

  'https': (None, ip:端口)

}

2、方法一,内置代理

在start_requests(定制起始请求)设置环境变量即可

def start_requests(self): import os os.environ["HTTP_PROXY"] = "http://用户名:密码@192.169.1.1:端口" os.environ["HTTPS_PROXY"] = "http://用户名:密码@114.110.1.1:端口" for url in self.start_urls: yield Request(url=url, callback=self.parse)

3、方法二,内置代理

根据源码分析

if 'proxy' in request.meta: if request.meta['proxy'] is None: return # extract credentials if present creds, proxy_url = self._get_proxy(request.meta['proxy'], '') request.meta['proxy'] = proxy_url if creds and not request.headers.get('Proxy-Authorization'): request.headers['Proxy-Authorization'] = b'Basic ' + creds return elif not self.proxies: return

格式,使用meta

def start_requests(self): # import os # os.environ["HTTP_PROXY"] = "http://用户名:密码@192.169.1.1:端口" # os.environ["HTTPS_PROXY"] = "http://用户名:密码@114.110.1.1:端口" for url in self.start_urls: yield Request(url=url, callback=self.parse, meta={'proxy': "http://用户名:密码@192.169.1.1:端口"})

注意:优先执行meta

二、自定义代理(自定义中间件)

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 MYHTTPProxyMiddleware(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://root:@[email protected]:8000/", "http://root:@[email protected]:8000/", "http://root:@[email protected]:8000/", "http://root:@[email protected]:8000/", "http://root:@[email protected]:8000/", ] 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

修改配置文件(56行)

DOWNLOADER_MIDDLEWARES = { # 'toscrapy.middlewares.ToscrapyDownloaderMiddleware': 543, 'toscrapy.proxy.MYHTTPProxyMiddleware': 543, }

查看默认的下载中间件和中间件的权重值

    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/24548.html

    分享给朋友:

    “Scrapy设置代理scrapy 代理” 的相关文章

    甲骨文注册流程详解:成功申请的关键步骤与技巧

    甲骨文(Oracle Cloud)的注册流程看似复杂,但只要事先做好准备,整个过程其实非常顺利。我自己在注册时感受到了这一点,以下就是我想和大家分享的步骤和经验。 申请前的准备工作 在我们开始注册之前,有几个准备工作是必须要做的。首先,创建一个国际邮箱是至关重要的。虽然国内的邮箱也可以使用,但我推荐...

    IDC托管便宜还是公有云便宜?全面解析成本优势与选择指导

    在选择IT基础设施时,我发现IDC托管和公有云服务是两个普遍关注的选项。很多企业在进行服务器部署时都在思考“IDC托管便宜还是公有云便宜?”为了帮助大家更好地理解,我决定从几个关键方面进行深入分析。 IDC托管的价格构成 在开始探讨具体价格前,我们有必要理清IDC托管的价格构成。基本上,IDC托管费...

    Cloudflare 菲律宾节点:提升网络体验与速度的解决方案

    在当今数字化时代,每一个在线体验都至关重要。CloudFlare的出现,正是为了满足这一迫切的需求。作为全球知名的CDN(内容分发网络)服务提供商,CloudFlare不仅致力于加速网站的加载速度,也为用户提供安全防护服务。借助全球分布的节点,CloudFlare能够将用户请求快速而安全地送达目的地...

    选择日本不限流量VPS的最佳方案与优化建议

    日本不限流量VPS市场现状 日本的VPS市场,尤其是不限流量的产品,正迎来一个快速发展的阶段。随着互联网技术的进步,亚洲的网络环境发生了翻天覆地的变化。尤其是在日本,不限流量VPS因其连接速度快、数据中心服务优质而广受欢迎,对那些需要持续大流量的网站运营者来说,这可是一个无与伦比的选择。 我发现,随...

    深入了解M247 VPS:价格、性能与适用场景全分析

    M247 VPS概述 在如今数字化时代,云计算的需求不断上升,各种VPS(虚拟专用服务器)服务也层出不穷。今天我想和大家分享的是M247 VPS,它是一家相对年轻但却在行业内逐渐崭露头角的服务商。M247成立于2012年,隶属于M24Seven Group旗下,提供多种服务,包括VPS、虚拟主机、服...

    如何有效使用WP Rocket插件提升WordPress网站性能

    WP Rocket是一个强大的高级WordPress缓存插件,它的使用对于提升网站的速度和性能起着至关重要的作用。如今,网站的加载速度对于用户体验和SEO排名都有着重要的影响。WP Rocket通过一系列功能和设置,帮助用户轻松优化自己的网站,进而增加访问量和客户满意度。 在使用WP Rocket插...