使用代理ip防止爬虫被封ip(附蘑菇代理开发过程)
在我们使用爬虫的过程中,很容易遇到反爬机制是禁用ip的,可以使用代理ip解决ip被封的问题。但是网上ip代理有很多家,到底选哪家好呢?可以看看这篇文章:https://cuiqingcai.com/5094.html。
本文选择蘑菇代理(官网地址http://www.moguproxy.com)进行演示,使用php语言,如果需要大规模抓取可以去试试python。
可以看到官网提供两种方式进行代理,一种是ip代理,一种是隧道代理。ip代理就是把ip和端口号给你,你拿去用,一般有效期是三分钟;隧道代理就是你把网址提交到给代理服务商,代理服务商使用自己的代理ip帮你访问这个网站,然后把信息返回给你。
1、第一种方式
首先代理提供商会提供给你一个ip接口,你可以通过这个接口去获取ip和端口号。但是这些ip的时效是三分钟,所以我建立了一个ip池,每两分钟去更新一次ip池,以确保这些ip每次用到的时候都是有效的(当然官网说ip可用率是>95%)。下面给出代码:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $link);//要访问的url
curl_setopt ($ch, CURLOPT_PROXY, $ip);//使用代理访问 $ip是 ip:port 格式
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/3.0.0.13');//有的网站需要ua,设置一下
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//https网站取消ssl验证
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);//允许30*跳转
curl_setopt($ch, CURLOPT_TIMEOUT,30);//设置超时时间
$response = curl_exec($ch);
if ($response === false) {$error_info = curl_error($ch);curl_close($ch);//关闭curlreturn false;
} else {curl_close($ch);//关闭curlvar_dump($response);
}
2、第二种方式
查看蘑菇代理接入文档php代码
替换appkey之后,发现根本不行,一直提示权限不足。后来检查代码才发现 “$appKey = 'Basic '+ 'XXXXXXXX';”的问题,php中拼接字符串应该用“.”,而不是“+”,这里用加号$appKey的值变成0了,我问客服这段代码谁写的,他居然和我说是用户提供的,笑哭了。改了代码之后发现不能实现301重定向,不能抓取https的网址。果断改写成curl的。下面是代码:
$appKey = 'Basic '. 'Q2R1cmNFbEc1VWU5eGVKYTpqcUZmNU';//这里appkey在蘑菇代理控制台找到$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $link);//要访问的url
curl_setopt ($ch, CURLOPT_PROXY, 'transfer.mogumiao.com:9001');//使用代理访问
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.1.0.13');
curl_setopt ($ch, CURLOPT_HTTPHEADER, ["Proxy-Authorization: {$appKey}"]);//设置代理权限
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//https网站取消ssl验证
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);//允许30*跳转
curl_setopt($ch, CURLOPT_TIMEOUT,30);//设置超时时间
$response = curl_exec($ch);
if ($response === false) {$error_info = curl_error($ch);curl_close($ch);//关闭curlreturn false;
} else {curl_close($ch);//关闭curlvar_dump($response);
}
用了一周蘑菇代理,实测ip可用率只有81%,与官网说的大于95%还是有差别的。
使用代理ip防止爬虫被封ip(附蘑菇代理开发过程)相关推荐
- python爬虫cookie池 与ip绑定_Python爬虫防封ip的一些技巧
在编写爬虫爬取数据的时候,因为很多网站都有反爬虫措施,所以很容易被封IP,就不能继续爬了.在爬取大数据量的数据时更是瑟瑟发抖,时刻担心着下一秒IP可能就被封了. 本文就如何解决这个问题总结出一些应对措 ...
- Python爬虫被封ip解决方案
在使用 Python 程序进行网络爬虫开发时,可能因以下原因导致被封 IP 或封禁爬虫程序: 1.频繁访问网站 爬虫程序可能会在很短的时间内访问网站很多次,从而对目标网站造成较大的负担和压力,这种行为 ...
- 【报错】This user agent has been blocked due to abuse 爬虫被封IP解决
一.报错形式 记录一下,今天继续做我的毕设,爬crt.sh站记录时,发现我的IP被封掉了-- requests.get('https://crt.sh/?q=' + domain, headers=h ...
- 代理IP的背后原理简单介绍与python写一个获取代理IP的爬虫
title: 代理IP的那些事 copyright: true top: 0 date: 2019-11-13 14:20:39 tags: 代理IP categories: 爬虫笔记 permali ...
- iMessage垃圾短信成灾 苹果将封IP地址{转载}
iMessage垃圾短信 占比达30% 据上海消保委的数据,2014年10月该市23%的垃圾短信来自于苹果iMessage服务.据安全和反垃圾信息公司Cloudmark的数据,借道iMessage系统 ...
- 你爱我,我爱你,IP被封很头疼【Python爬虫实战:ip代理js逆向采集】
大家好,我是辣条. 一见不日甚是...应该是一日不见甚是想念[串台了,这是郭德纲老师相声里的梗]. 直接进入今天的主题,相信学过爬虫的朋友们都知道爬虫封ip十分头疼,辣条今天带你获取免费ip代理 爬取 ...
- 分享一个抓取网易云不同分类下歌曲热评的python爬虫,并且不怕被封ip(非使用代理)
这个爬虫是我一门课程的作业中用到,很久了,偶然想起就分享到这里吧,我写的大部分代码,小部分由我同学完成. 再抓评论过程中被封ip这是个令人头疼的事情,如果你是宽带用户,并且是动态ip,被封ip后直接调 ...
- python爬虫代码1000行-简单用14行代码写一个Python代理IP的爬虫
相信用别的语言只用14行是写不出来这样的效果的!而我们的Python 只需要区区的14行代码就能写出来哦! 这就是Python为什么是全球现在比较流行的语言之一了!因为简单 容易学! 比较上手! 现在 ...
- 爬虫单个ip代理设置_爬虫怎样设置代理ip池
在网络迅速发展的今天,互联网企业层出不穷,爬虫工作者也越来越多,大家都知道,代理ip是爬虫工作者的一个有力助手,今天小编在这里就与大家分享一下如何设置代理池以及伪装成浏览器的方法,请看下面的介绍. 1 ...
最新文章
- Java知识汇总-思维导图
- 计算机组成原理整数乘法,计算机组成原理 - 定点整数的原码补码运算(待验证)...
- python实现文件上传功能_python实现上传下载文件功能
- SAP 客户主数据表BUT000的extractor
- vector中find和find_if的用法
- 如何成为架构师?3条有效的实战经验
- LeetCode002-两数相加(Add Two Numbers)-Rust语言实现
- 嵌入式工作笔记0003---认识LCD显示器
- 实验2-2-3 计算存款利息 (10 分)
- Hibernate---延迟加载和OpenSessionInView
- FISCO BCOS Solidity 智能合约 批量插入新增数据
- logback整合Logstash
- python画图软件是哪个_python画图软件是哪个
- 计算机加入域后的用户名和密码,Windows自动改计算机名和加入域工具
- c语言编写qq机器人软件,未编译的QQ机器人C语言版
- eos源码赏析(七):EOS智能合约入门之共识机制初探
- ps去水印(操作流程)
- 百度地图api将可视区域定位到当前所在位置
- 字符串折叠、涂色问题
- Harfbuzz version too old (1.2.1)