scrapy框架之代理的使用
首先我们检测ip是否可用:
1.对于免费代理的检测
#免费代理或不用密码的代理
url = 'http://httpbin.org/get' proxy = '127.0.0.0:8000' proxies = {
'http': 'http://' + proxy,
'https': 'https://' + proxy,
} response = requests.get(url, proxies=proxies, verify=False)
print(response.text)
注:这里的proxy改成你要检测的ip即可
返回结果中:"origin": "127.0.0.0" #即为你的代理,可用
2.对于付费代理的检测:
#测试付费代理和加密代理
url = 'http://httpbin.org/get' proxy_host = '127.0.0.0'
proxy_port = '' proxy_user = 'root'
proxy_pass = 'root' proxy_meta = 'http://%(user)s:%(pass)s@%(host)s:%(port)s' % {
'host': proxy_host,
'port': proxy_port,
'user': proxy_user,
'pass': proxy_pass,
} proxies = {
'http': proxy_meta,
'https': proxy_meta,
} response = requests.get(url, proxies=proxies)
print(response.text)
将上面的ip和账户之类的换成你自己的即可(参照阿布云给的示例进行付费检测)
下面将代理运用到scrapy框架中:
在scrapy框架中有两种方法进行
1.直接编写在scrapy爬虫代码中
2.利用中间件middlewares.py进行
现在我将详细讲述下这两种分别如何进行
首先我们需要有一个可用的ip
对于方法一:利用meta函数进行携带即可访问
scrapy爬虫代码中:
import scrapy class ProxySpider(scrapy.Spider):
name = 'proxy'
allowed_domains = ["httpbin.org"] def start_requests(self):
url = 'http://httpbin.org/get'
proxy = '127.0.0.0:8000' proxies = ""
if url.startswith("http://"):
proxies = "http://"+str(proxy)
elif url.startswith("https://"):
proxies = "https://"+str(proxy)
#注意这里面的meta={'proxy':proxies},一定要是proxy进行携带,其它的不行,后面的proxies一定 要是字符串,其它任何形式都不行
yield scrapy.Request(url, callback=self.parse,meta={'proxy':proxies}) def parse(self,response):
print(response.text)
(好多坑啊,写代码的时候踩着都想流泪)
对于方法二:利用middlewares中间件进行
1.在middlewares.py问件中添加如下代码即可:
#配置代理
class ProxyMiddleware(object):
def process_request(self,request,spider):
if request.url.startswith("http://"):
request.meta['proxy']="http://"+'127.0.0.0:8000' # http代理
elif request.url.startswith("https://"):
request.meta['proxy']="https://"+'127.0.0.0:8000' # https代理
2.在settings.py文件中添加配置
# Enable or disable downloader middlewares
# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html
DOWNLOADER_MIDDLEWARES = {
#这个biquge为你项目的名字,我是爬笔趣阁的,2333~
'biquge.middlewares.ProxyMiddleware': 100,
}
3.scrapy爬虫代码中正常编写代码,不用做任何修改/添加
import scrapy class ProxySpider(scrapy.Spider):
name = 'proxy'
allowed_domains = ["httpbin.org"]
# start_urls = ['http://httpbin.org/get'] def start_requests(self):
url = 'http://httpbin.org/get'
yield scrapy.Request(url, callback=self.parse) def parse(self,response):
print(response.text)
ip代理池的应用:https://blog.csdn.net/u013421629/article/details/77884245
scrapy框架之代理的使用的更多相关文章
- 网络爬虫之scrapy框架设置代理
前戏 os.environ()简介 os.environ()可以获取到当前进程的环境变量,注意,是当前进程. 如果我们在一个程序中设置了环境变量,另一个程序是无法获取设置的那个变量的. 环境变量是以一 ...
- scrapy框架设置代理
网易音乐在单ip请求下经常会遇到网页返回码503的情况经查询,503为单个ip请求流量超限,猜测是网易音乐的一种反扒方式因原音乐下载程序采用scrapy框架,所以需要在scrapy中通过代理的方式去解 ...
- scrapy框架设置代理ip,headers头和cookies
[设置代理ip] 根据最新的scrapy官方文档,scrapy爬虫框架的代理配置有以下两种方法: 一.使用中间件DownloaderMiddleware进行配置使用Scrapy默认方法scrapy s ...
- Scrapy 框架 中间件 代理IP 提高效率
中间件 拦截请求跟响应 进行ua(User-Agent ) 伪装 代理 IP 中间件位置: 引擎 和下载器 中间 的中间件 ( 下载中间件) 引擎 跟 spider 中间 的中间件 ( 爬虫中间件)( ...
- Scrapy框架使用代理
使用代理抓取https://www.baidu.com/s?wd=ip # -*- coding: utf-8 -*- ''' 一.在settings.py中开启中间件 DOWNLOADER_MIDD ...
- scrapy框架中间件配置代理
scrapy框架中间件配置代理import random#代理池PROXY_http = [ '106.240.254.138:80', '211.24.102.168:80',]PROXY_http ...
- Python爬虫Scrapy框架入门(2)
本文是跟着大神博客,尝试从网站上爬一堆东西,一堆你懂得的东西 附上原创链接: http://www.cnblogs.com/qiyeboy/p/5428240.html 基本思路是,查看网页元素,填写 ...
- 关于使用scrapy框架编写爬虫以及Ajax动态加载问题、反爬问题解决方案
Python爬虫总结 总的来说,Python爬虫所做的事情分为两个部分,1:将网页的内容全部抓取下来,2:对抓取到的内容和进行解析,得到我们需要的信息. 目前公认比较好用的爬虫框架为Scrapy,而且 ...
- 解读Scrapy框架
Scrapy框架基础:Twsited Scrapy内部基于事件循环的机制实现爬虫的并发.原来: url_list = ['http://www.baidu.com','http://www.baidu ...
随机推荐
- [无效]网络流之Dinic算法
// 此博文为迁移而来,写于2015年2月6日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102vrg4.html UPDA ...
- c# HttpClient的HTTP/2支持
HTTP/2 是 HTTP 协议的主要修订版.HTTP/2 的一些显著功能是支持标头压缩和通过同一连接完全多路复用流.虽然 HTTP/2 保留了 HTTP 的语义(HTTP 标头.方法等),但它在数据 ...
- LOJ2778 [BOI2018]基因工程 随机化
题面 不想写了...留坑吧... 基本思想可参照随机化解决判同问题的总结 代码: #include<bits/stdc++.h> using namespace std; #define ...
- solr配置同义词,停止词,和扩展词库(IK分词器为例)
定义 同义词:搜索结果里出现的同义词.如我们输入”还行”,得到的结果包括同义词”还可以”. 停止词:在搜索时不用出现在结果里的词.比如is .a .are .”的”,“得”,“我” 等,这些词会在句子 ...
- maven site 命令报错
在执行 mvn site 命令时报错: java.lang.NoClassDefFoundError: org/apache/maven/doxia/siterenderer/DocumentCont ...
- 文本编辑 工具vim
一vim的3种常用模式:一般模式.编辑模式和命令模式 如果系统里没有vim工具,需安装 1,一般模式 首先复制一个文件到/tmp/目录下,并改名为1,txt 移动光标: h 或 向左箭头键(←) ...
- Spring BeanFactory继承结构图
结构图 高清大图:https://img2018.cnblogs.com/blog/813478/201910/813478-20191030114422275-1092084932.jpg 源文件( ...
- [转帖]华为PC端台式机电脑来啦!自研主板及自研CPU处理器
华为PC端台式机电脑来啦!自研主板及自研CPU处理器 在性能上,4核版相当于酷睿i5 ,8核版相当于酷睿i5 8300H. https://www.bilibili.com/read/cv376376 ...
- 2014百度之星 Party
Party Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- memcpy() 实现循环缓冲区数据的读写
使用memcpy()函数做循环缓冲区的读写 首先对mencpy函数做个简单的介绍 下面是 memcpy() 函数的声明 void *memcpy(void *str1, const void *str ...