ip代理加速器23邻近云速捷_Scrapy 设置代理终极宝典

5c918ca432430d31898f19770ed854d5.png

总结了一下在scrapy项目中用过的所有代理方法,原因在于代理的种类有点多,代理商、自己的代理池接入方式多变,项目需求也是多变的,肯定没有一种万能的方式,不过我相信这里总有一个适合你。(我尽量写的详细一点:我怕以后我自己看不懂了。。)

常见代理有哪些呢?

  • 最直接的IP:PORT代理;从代理池获取、代理商接口获取;
    • 最常见、最灵活、配置方式易懂;代理有效性需要自己检测;
  • 带验证的USER:PASS@IP:PORT代理
  • 代理隧道
    • 配置起来会有坑;配置成功之后就简单了,不需要去关心代理失效问题;(我这种懒人最喜欢)

代理加载方式:

  • 在spider代码中直接加代理
    • 适合小项目;或者是某类请求(在同一个方法中)需要走代理,其他的不需要;
  • 写代理中间件(推荐)
    • 这种方式更加灵活,也最科学;

简单介绍完毕,让我们从头开始。。。。


创建测试项目:


创建项目:

> scrapy startproject test_spider
> cd test_spider

创建爬虫:

scrapy genspider test test.com

目录结构:

├── scrapy.cfg
└── test_spider
    ├── __init__.py
    ├── items.py
    ├── middlewares.py
    ├── pipelines.py
    ├── settings.py
    └── spiders
        ├── __init__.py
        └── test.py

非中间件方法:


修改一下spider的start_url, 此时我们的代码是这样:

test.py

# -*- coding: utf-8 -*-
import scrapy
​
​
class TestSpider(scrapy.Spider):
    name = 'test'
    allowed_domains = ['test.com']
    start_urls = ['http://httpbin.org/ip']  # 修改start_url,默认会返回request的IP
​
    def parse(self, response):
        print(response.text)
​

运行爬虫:

> scrapy crawl test
...
2019-08-20 19:19:39 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://httpbin.org/robots.txt> (referer: None)
2019-08-20 19:19:40 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://httpbin.org/ip> (referer: None)
{
  "origin": "116.206.152.179, 116.206.152.179"
}
​
2019-08-20 19:19:40 [scrapy.core.engine] INFO: Closing spider (finished)
...

正常返回了我的外网IP地址,帅···嗝屁,这样去做爬虫要被喷了···

此时,我去某代理商搞个IP回来用···

噔噔咚··· 搜到个免费的代理IP,试试看,首先要改一下代码:

test.py

# -*- coding: utf-8 -*-
import scrapy
​
​
class TestSpider(scrapy.Spider):
    name = 'test'
    allowed_domains = ['test.com']
    start_urls = ['http://httpbin.org/ip']
​
    def start_requests(self):  # 控制爬虫发出的第一个请求
        proxy = "http://180.175.2.68:8060"
        yield scrapy.Request(self.start_urls[0], meta={"proxy": proxy})
​
    def parse(self, response):
        print(response.text)

运行爬虫:

...
2019-08-20 21:38:02 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying <GET http://httpbin.org/ip> (failed 1 times): TCP connection timed out: 10060: 由于连接方在一段时间后没有正确答
复或连接的主机没有反应,连接尝试失败。.
2019-08-20 21:38:23 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying <GET http://httpbin.org/ip> (failed 2 times): TCP connection timed out: 10060: 由于连接方在一段时间后没有正确答
复或连接的主机没有反应,连接尝试失败。.
2019-08-20 21:38:23 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://httpbin.org/ip> (referer: None)
{
  "origin": "180.175.2.68, 180.175.2.68"
}
​
2019-08-20 21:38:24 [scrapy.core.engine] INFO: Closing spider (finished)
...
​

结果是成功的,连接了两次,终于成功了,可见代理的质量也是很重要的;

这里稍微解释一下修改后的test.py文件:

增加了一个start_requests函数,默认情况下,scrapy在启动爬虫的时候会自动请求start_urls中的链接,请求成功会自动回调parse函数,这样的坏处是无法控制请求;重写start_requests方法,给请求加上代理,方法很简单,在meta中以字典的形式传递proxy参数即可;按照这种方式,理论上可以给每个方法的请求都自定义一个proxy。例如:

# -*- coding: utf-8 -*-
import scrapy
​
​
class TestSpider(scrapy.Spider):
    name = 'test'
    allowed_domains = ['test.com']
    start_urls = ['http://httpbin.org/ip']
​
    def start_requests(self):
        proxy = "http://180.175.2.68:8060"
        yield scrapy.Request(self.start_urls[0], meta={"proxy": proxy})
​
    def parse(self, response):
        print("parse-->", response.text)
        proxy = "http://47.94.89.87:3128"
        yield scrapy.Request(
            self.start_urls[0],
            meta={"proxy": proxy},
            callback=self.parse_first,
            dont_filter=True
        )
​
    def parse_first(self, response):
        print("parse_first-->", response.text)

运行爬虫:

...
2019-08-20 21:56:11 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://httpbin.org/ip> (referer: None)
parse--> {
  "origin": "180.175.2.68, 180.175.2.68"
}
​
2019-08-20 21:56:13 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://httpbin.org/ip> (referer: http://httpbin.org/ip)
parse_first--> {
  "origin": "47.94.89.87, 47.94.89.87"
}
​
2019-08-20 21:56:13 [scrapy.core.engine] INFO: Closing spider (finished)
...
​

看结果,每个方法都使用了不同的代理,这段代码就不解释了。

下面应该是带有验证信息的代理介绍···奈何我没找到那种代理···贴个帖子,感谢大佬整理的,我就不重复打字了Scrapy框架之如何给你的请求添加代理。

重点放在中间件部分。

中间件方法:


重头戏来了,中间件。使用过scrapy的童鞋应该多少都写过中间件,来满足业务需求。中间件是开关式的,在settings中打开关闭都很方便,一次编写,重复利用。

直接上···

普通代理中间件: 实现上半篇相同的功能。

首先还原test.py

# -*- coding: utf-8 -*-
import scrapy
​
​
class TestSpider(scrapy.Spider):
    name = 'test'
    allowed_domains = ['test.com']
    start_urls = ['http://httpbin.org/ip']
​
    def parse(self, response):
        print("parse-->", response.text)

我们来编写一个代理中间件,中间件写在middlewares.py文件中:

class TestProxyMiddleware(object):
    def process_request(self, request, spider):
        proxy = "http://47.94.89.87:3128"
        request.meta["proxy"] = proxy
        print(f"TestProxyMiddleware --> {proxy}")

代码很简单,简单解释一下。

中间件,可以理解为spider在发送和接受请求过程中的中间环节,在这里我们可以对每个请求进行重新编辑,包括请求的header和proxy这些,都可以重写编辑再让请求发送出去,这样的好处是,我们在spider里可以专心写逻辑代码部分,请求相关的配置,可以留在中间件统一处理。

在这个中间件里,我们自定义的中间件名字为TestProxyMiddleware,我们重写了一个方法process_request,看函数名就知道这是一个处理请求的方法,我们给经过这个中间件的所有请求的meta都加了一个proxy参数。

process_request函数有2个参数,request就是spider中发送的请求,我们可以重新编辑这个请求的属性。spider当前运行的spider相关信息,比如爬虫的名字可以在这里获取,对于不同名称的爬虫,同一个中间件中可以做到分离处理。

下面来测试一下···

先将我们写的中间件打开,在settings.py中,打开配置:

将默认的中间件注释掉,打开我们写的。

# Enable or disable downloader middlewares
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
DOWNLOADER_MIDDLEWARES = {
   # 'test_spider.middlewares.TestSpiderDownloaderMiddleware': 543,
   'test_spider.middlewares.TestProxyMiddleware': 543,
}

运行爬虫:

 ...
 'scrapy.extensions.logstats.LogStats']
2019-08-20 22:25:56 [scrapy.middleware] INFO: Enabled downloader middlewares:
['scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware',
 ...
 'test_spider.middlewares.TestProxyMiddleware',
 ...
 'scrapy.downloadermiddlewares.stats.DownloaderStats']
2019-08-20 22:25:56 [scrapy.middleware] INFO: Enabled spider middlewares:
...
2019-08-20 22:25:56 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6023
TestProxyMiddleware --> http://47.94.89.87:3128
2019-08-20 22:26:00 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://httpbin.org/ip> (referer: None)
parse--> {
  "origin": "47.94.89.87, 47.94.89.87"
}
​
2019-08-20 22:26:00 [scrapy.core.engine] INFO: Closing spider (finished)
...
​

可以看到,我们的中间件在项目中开启了,并且运行成功。

这样我们的爬虫代码是很简洁的,请求相关的事情,交给中间件处理。而且这样写了一个中间件,所有的爬虫都可以使用。

目前是很简单的将代理写死了,静态的,实际项目中,多数都需要不断换IP,这时就需要将proxy参数写成动态的,要么是从本地代理池获取一个,要么是代理商拿代理,这又是另一个故事了。

带有验证的代理也是一样,在中间件加上验证就可以了。这里就不写了。有童鞋用到不会写的话就度娘或者私信我。

我想了想,简单贴一下:

import base64
class ProxyMiddleware(object):
    def process_request(self,request,spider):
        proxy = "xxx.xxx.xxx.xxx:port"
        # 设置代理的认证信息
        auth = base64.b64encode(bytes("USERNAME:PASSWORD", 'utf-8'))
        request.headers['Proxy-Authorization'] = b'Basic ' + auth
        request.meta['proxy'] = 'http://' + proxy

代理隧道: 这是我比较喜欢用的代理方式,动态切换IP的事情交给代理商,我们将每个请求通过中间件转发给代理商,代理商将结果返回给我,至于他们是怎么获取的,我们不用关心,当然我们要提前测试代理隧道是不是每次请求都换了IP,再使用。

这里的坑比较多...未完待续...准备写几个常用的代理中间件直接贴出来。

主要处理代理的去除过滤,返回的响应错误重试, 不同方法分离处理, 多个代理隧道同时使用等。

和scrapy对代理隧道的验证问题。

weixin_39924779
关注 关注
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
python3 Scrapy爬虫框架ip代理配置的方法
12-23
 在做爬虫项目的过程中遇到ip代理的问题,网上搜了一些,要么是用阿里云的ip代理,要么是搜一些网上现有的ip资源,然后配置在setting文件中。这两个方法都存在一些问题。 1、阿里云ip代理方法,网上大都是配置阿里...
Python Scrapy 302 重定向导致Closing spider (finished),想要继续运行(已解决)
weixin_43890347的博客
08-06 1807
错误描述如下 2021-08-06 11:08:25 [scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (302) to <GET https://tv.sohu.com/upload/static/special/anti-reptile/index.html> from <GET https://so.tv.sohu.com/list_p1101_p2_p3_p4_p5_p6_p7_p8_p9_p102_p11_p12
Python实战演练之scrapy初体验
甫式人生
03-03 636
最近一直在做网络爬虫的练习,现在对整个爬取过程做个总结。 配置: 电脑:MacBook Pro 系统:macOS Catalina 10.15.3 Python版本:3.8 Python IDE:PyCharm 数据库:Mysql 数据库管理工具:Navicat Premium 正式进入正题 scrapy初体验 scrapy安装我前面有在macOS成功在python3环境下安装Scrapy中提到,...
python数据分析案例2-1:Python练习-Python爬虫框架Scrapy入门与实践
childboy的博客
08-07 1370
本文建立在学习完大壮老师视频Python最火爬虫框架Scrapy入门与实践,自己一步一步操作后做一个记录(建议跟我一样的新手都一步一步进行操作). 主要介绍: 1、scrapy框架简介、数据在框架内如何进行流动 2、scrapy框架安装、mongodb数据库安装 3、scrapy抓取项目如何创建 4、scrapy抓取项目如何进行数据解析 5、scrapy抓取项目如何绕过反爬机制抓取数据 6、scrapy抓取项目如何存储数据到不同的格式 = 抓取目标: 本文通过网页豆瓣电影排行数据的抓取和清洗,介绍Pyth.
python求教运行爬虫结不报错但没有文件的输出,请指教
Wood_Maple_Walk的博客
02-24 7871
python爬虫问题求教,程序能够运行,但不能输出到文件,甚至都没有新建文本文件,请大神指教 2019-02-24 18:46:23 [scrapy.utils.log] INFO: Scrapy 1.6.0 started (bot: weather) 2019-02-24 18:46:23 [scrapy.utils.log] INFO: Versions: lxml 4.3.1.0, lib...
pythonscrapy爬虫_零基础写python爬虫之使用Scrapy框架编写爬虫
weixin_39754267的博客
11-21 335
网络爬虫,是在网上进行数据抓取的程序,使用它能够抓取特定网页的HTML数据。虽然我们利用一些库开发一个爬虫程序,但是使用框架可以大大提高效率,缩短开发时间。Scrapy是一个使用Python编写的,轻量级的,简单轻巧,并且使用起来非常的方便。使用Scrapy可以很方便的完成网上数据的采集工作,它为我们完成了大量的工作,而不需要自己费大力气去开发。首先先要回答一个问题。问:把网站装进爬虫里,总共分几...
xici_ip_CRAWL_scrapy_
10-03
使用scrapy编写的简单的西刺代理信息爬虫
Python爬虫框架scrapy实现downloader_middleware设置proxy代理功能示例
12-25
本文实例讲述了Python爬虫框架scrapy实现downloader_middleware设置proxy代理功能。分享给大家供大家参考,具体如下: 一、背景: 小编在爬虫的时候肯定会遇到被封杀的情况,昨天爬了一个网站,刚开始是可以了,在...
zhihu_scrapy_爬虫excel_知乎爬虫_scrapy扫码登录_
10-01
知乎爬虫,通过手机扫码模拟登入,并且爬取回答评论等,并存入excel或写入sql
代码以及其他_scrapy爬虫框架课程_scrapy_
10-03
scrapy爬虫框架课程,包含全部课件与代码课程纲要:1.scrapy的概念作用和工作流程2.scrapy的入门使用3.scrapy构造并发送请求4.scrapy模拟登陆5.scrapy管道的使用6.scrapy中间件的使用7.scrapy_redis概念作用和流程8....
python scrapy爬虫代码及填坑
01-01
涉及到详情页爬取 目录结构: kaoshi_bqg.py import scrapy from scrapy.spiders import Rule from scrapy.linkextractors import LinkExtractor from ..items import BookBQGItem class KaoshiBqgSpider(scrapy.Spider): name = 'kaoshi_bqg' allowed_domains = ['biquge5200.cc'] start_urls = ['https://www.biquge5200.cc/xuanh
[Python]网络爬虫(12):爬虫框架Scrapy的第一个爬虫示例入门教程
热门推荐
汪海的实验室
02-23 21万+
爬虫框架Scrapy的第一个爬虫示例入门教程。 我们使用dmoz.org这个网站来作为小抓抓一展身手的对象。 首先先要回答一个问题。 问:把网站装进爬虫里,总共分几步? 答案很简单,四步: 新建项目 (Project):新建一个新的爬虫项目 明确目标(Items):明确你想要抓取的目标 制作爬虫(Spider):制作爬虫开始爬取网页 存储内容(Pipeline):设计管道存储爬取内容 好的,基本流程既然确定了,那接下来就一步一步的完成就可以了。
关于scrapy爬虫使用的一些小经验和注意事项
Kosmoo的博客
11-29 2万+
关于scrapy爬虫使用的一些小经验和注意事项 1. 图片下载的设置 class ClawernameSpider(scrapy.Spider): # 定制化设置 custom_settings = { 'LOG_LEVEL': 'DEBUG', # Log等级,默认是最低级别debug 'ROBOTSTXT_OBEY': False,
爬虫Scrapy框架项目运行时报错!求解决!
kyrie_love的博客
03-26 3万+
E:\JetBrains\PyCharm\mySpider&gt;scrapy crawl itcast -o itcast.json2018-03-26 14:50:23 [scrapy.utils.log] INFO: Scrapy 1.5.0 started (bot: mySpider)2018-03-26 14:50:23 [scrapy.utils.log] INFO: Version...
python之scrapy(四)downloader middlewares的用法
YeChao3的博客
11-05 7393
下载中间件是处于引擎(Engine)和下载器(DownLoader))之间的一层组件,可以有多个下载中间件被加载运行。   当引擎传递请求给下载器的过程中,下载中间件可以对请求进行处理 (例如增加http header信息,增加proxy信息等); 在下载器完成http请求,传递响应给引擎的过程中, 下载中间件可以对响应进行处理(例如进行gzip的解压等)   1.使用...
[Scrapy使用技巧] 如何在scrapy中捕获并处理各种异常
Rei的博客
06-15 3万+
前言 使用scrapy进行大型爬取任务的时候(爬取耗时以天为单位),无论主机网速多好,爬完之后总会发现scrapy日志中“item_scraped_count”不等于预先的种子数量,总有一部分种子爬取失败,失败的类型可能有如下图两种(下图为scrapy爬取结束完成时的日志): scrapy中常见的异常包括但不限于:download error(蓝色区域), http code 40...
#这是一篇关于 LabVIEW 介绍说明、使用技巧和优缺点对文章
最新发布
04-26
labview
重庆大学数字电子技术试题.pdf
04-26
重庆大学期末考试试卷,重大期末考试试题,试题及答案
scrapy中随机代理ip设置
05-25
Scrapy设置随机代理IP需要进行以下步骤: 1. 安装scrapy-rotating-proxies库 ``` pip install scrapy-rotating-proxies ``` 2. 在settings.py文件中添加以下配置 ```python DOWNLOADER_MIDDLEWARES = { '...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 按钮灭了_默纳克:按检修上行 / 下行按钮,电梯不运行 9254
  • arcgis字段计算器赋值_ArcGIS中62个常用应用技巧汇总【必须收藏】 7135
  • oracle 17439,无效的SQL类型:sqlKind = UNINITIALIZED错误显示 6870
  • 不能装载文档控件。请在检查浏览器的选项中检查浏览器的安全设置_Chrome最新更新是什么?全面的安全性,隐私保护... 6363
  • python tkinter 窗口关闭_如何处理Tkinter中的窗口关闭事件? 6191

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 将安卓项目部署云服务器,将项目部署至云服务器
  • 8月4日王者荣耀服务器维修几点,8月4日体验服停机更新公告
  • socket客户端和服务器通信协议,51. Socket服务端和客户端使用TCP协议通讯
2021年131篇
2020年204篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司布吉seo排名推荐枣庄设计网站哪家好潮州设计公司网站多少钱德州网站优化排名公司民治模板网站建设公司兴安盟网页制作公司德阳网页设计报价湘西关键词按天收费哪家好朝阳网站定制哪家好西宁网站优化按天收费公司临夏如何制作网站哪家好盘锦百度网站优化铁岭百搜标王眉山关键词按天计费价格青岛SEO按天收费价格德宏设计公司网站重庆SEO按效果付费哪家好苏州阿里店铺托管公司重庆网站推广方案公司株洲网站推广方案公司盘锦网站优化按天计费价格长春seo网站推广大庆网站优化排名哪家好包头优化报价鹤岗外贸网站建设哪家好南澳网站推广方案价格娄底优化推荐随州营销网站报价崇左网站搜索优化推荐福永网站搜索优化多少钱歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化