在爬虫的时候经常会遇到一个问题就是ip被封,由于ip对网站的短时间大量请求,让网站将我们的ip暂时封掉。这样我们就无法全部爬取自己想要的内容。

这里百度了一下解决办法,很多人都提到了ip代理管理池的问题,其大致思想就是在一些网站上找一些免费的ip代理,然后将他们放入一个列表中,这样我们就可以用这些免费的ip代理来不断更换,每当一个ip被封后我们就用代码调用下一个ip代理,直到我们爬完我们想要的数据。

大致思路如下:(这里我用Python来讲)

  1.访问一个国内免费ip代理的网站(注意要获取高匿的ip),这里我们以网站有代理(http://www.youdaili.net/)为例,进入后找到http代理点击进入,然后点击列表中最新日期的免费代理,就可以看到很多最新的免费ip代理

  2.用Python的BeautifulSoup解析这个页面,从页面中获取所有的ip地址及端口号,组合(ip:port的形式)起来存入一个列表中,

  3.获得了所有的ip后,接下来我么要验证这些ip能不能用,因为免费的ip代理大部分都是不能用的,所以我们就要从这些在网页上爬取的ip进行检查,去掉那些不能用的,具体方法是(注意一点Python中代理参数的格式是proxy=  {'http':'http://ip:port'}):首先我们将ip配置为Python中代理参数的默认格式,然后我们用urllib.request.ProxyHandler方法将proxy传入,接着用urllib.request.build.opener和urllib.request.install_opener()一次处理,代理参数就配置好了,然后我们以百度为测试网站,测试看看我们的代理ip能不能,用urllib.request.urlopen()如果能返回则证明可用反之不能用。能用的话我们就添加到一个新的列表中加一保存

  注:出入讲解的缘故,一下代码只爬取的免费代理网站上面的首页所有ip和port,至于翻页什么的大家应该可以自己搞定

代码如下:

 

import urllib.request
from bs4 import BeautifulSoup
#访问免费ip代理网址:http://www.youdaili.net/Daili/http/29381.html,处理得到所有的ip
def htmlParser(url):
iplist=[]
#设置头部
user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0'
headers = {"User-Agent": user_agent}
req = urllib.request.Request(url, headers=headers)
#获取页面html
html=urllib.request.urlopen(req).read()
soup=BeautifulSoup(html,'html.parser')
datas=soup.find("div",{"class":"content"}).findAll("p")
for data in datas:
ip=data.get_text().split("@")[0]
iplist.apend(ip)
return iplist #检测ip是否可用
def confirm_ip(ip):
#配置proxy
proxy={'http':'http://%s'%ip}
proxy_handler=urllib.request.ProxyHandler(proxy)
proxy=urllib.request.bulid_handler(proxy_handler)
urllib.request.install_handler(proxy) #用百度首页检测代理ip
test_url="http://www.baidu.com"
user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0'
headers = {"User-Agent": user_agent}
req = urllib.request.Request(test_url, headers=headers) try:
response=urllib.request.urlopen(req)
content=response.read()
#获取到内容
if content:
print("its a right ip")
return ip
#没有获取到
else:
return None
#访问错误
except urllib.request.URLError as e:
print(e.reason)
return None trueIp=[]
url="http://www.youdaili.net/Daili/http/29381.html"
iplist=htmlParse(url)
for ip in iplist;
if confirm_ip(ip)!=None:
trueIp.append(ip) print(trueIp)

好了内容就是这么都,有不妥的地方欢迎大家交流.(吐槽一下:博客园编辑器好垃圾,第一次徒手在自带的编辑器上写,写完了看到下面一个换色,一点所有代码不见了!产品经理把这个功能改一下吧!加个提醒也行啊!!)

爬虫关于ip管理池的应用的更多相关文章

  1. Python爬虫之ip代理池

    可能在学习爬虫的时候,遇到很多的反爬的手段,封ip 就是其中之一. 对于封IP的网站.需要很多的代理IP,去买代理IP,对于初学者觉得没有必要,每个卖代理IP的网站有的提供了免费IP,可是又很少,写了 ...

  2. 记一次企业级爬虫系统升级改造(六):基于Redis实现免费的IP代理池

    前言: 首先表示抱歉,春节后一直较忙,未及时更新该系列文章. 近期,由于监控的站源越来越多,就偶有站源做了反爬机制,造成我们的SupportYun系统小爬虫服务时常被封IP,不能进行数据采集. 这时候 ...

  3. 反爬虫之搭建IP代理池

    反爬虫之搭建IP代理池 听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部.可惜加了header请求头,加了cookie 还是被限制爬取了.这时就得祭出IP代理池!!! 下面就是requ ...

  4. ip代理池的爬虫编写、验证和维护

    打算法比赛有点累,比赛之余写点小项目来提升一下工程能力.顺便陶冶一下情操 本来是想买一个服务器写个博客或者是弄个什么FQ的东西 最后刷知乎看到有一个很有意思的项目,就是维护一个「高可用低延迟的高匿IP ...

  5. python3爬虫系列19之反爬随机 User-Agent 和 ip代理池的使用

    站长资讯平台:python3爬虫系列19之随机User-Agent 和ip代理池的使用我们前面几篇讲了爬虫增速多进程,进程池的用法之类的,爬虫速度加快呢,也会带来一些坏事. 1. 前言比如随着我们爬虫 ...

  6. 【python3】如何建立爬虫代理ip池

    一.为什么需要建立爬虫代理ip池 在众多的网站防爬措施中,有一种是根据ip的访问频率进行限制的,在某段时间内,当某个ip的访问量达到一定的阀值时,该ip会被拉黑.在一段时间内被禁止访问. 这种时候,可 ...

  7. 建立爬虫代理IP池

    单线程构建爬虫代理IP池 #!/usr/bin/python3.5 # -*- coding:utf-8 -*- import time import tempfile from lxml impor ...

  8. python爬虫实战(三)--------搜狗微信文章(IP代理池和用户代理池设定----scrapy)

    在学习scrapy爬虫框架中,肯定会涉及到IP代理池和User-Agent池的设定,规避网站的反爬. 这两天在看一个关于搜狗微信文章爬取的视频,里面有讲到ip代理池和用户代理池,在此结合自身的所了解的 ...

  9. python爬虫18 | 就算你被封了也能继续爬,使用IP代理池伪装你的IP地址,让IP飘一会

    我们上次说了伪装头部 ↓ python爬虫17 | 听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部 让自己的 python 爬虫假装是浏览器 小帅b主要是想让你知道 在爬取网站的时候 ...

随机推荐

  1. leetcode第25题--Remove Element

    problem: Given an array and a value, remove all instances of that value in place and return the new ...

  2. 【本·伍德Lua专栏】补充的基础06:简单的错误处理

    昨天遇到另外一位独立游戏开发人员,所以多聊了一会,然后-然后就没有看书了.(小若:借口!借口! ) 今天来聊聊错误处理吧.只是毕竟这仅仅是前面的章节.书上的内容似乎有点一笔带过的味道. 没关系,简单更 ...

  3. 关于easyui的tab,layout,datagrid嵌套的问题

    我的项目使用easyui作为前台的展示框架现在页面中是一个layout布局(分上,左,中)在左边是一些菜单,点击后,在中间部分增加一个tab显示内容而增加的tab里面是显示一些列表数据,列表上面是查询 ...

  4. jQuery在线选座订座(影院篇)

    原文:jQuery在线选座订座(影院篇) 我们在线购票时(如电影票.车票等)可以自己选座.开发者会在页面上列出座次席位,用户可以一目了然的看到可以选择的座位及支付.本文以电影院购票为例,为您展示如何选 ...

  5. TableLayout中怎么填充相同的布局

    在Android界面xml文件中可以导入另一个xml文件,就能实现一个功能就是重复利用相同的xml布局 有两种方法进行处理: include引入 定义一个布局Tab_flag.xml <?xml ...

  6. WCF RIA Services异常

    .svc处理程序映射缺失导致的WCF RIA Services异常 在确定代码.编译结果和数据库都正常的情况下,无法从数据库取到数据.错误提示:Sysyem.Net.WebException:远程服务 ...

  7. ASP.NET MVC应用程序使用axd格式文件

    ASP.NET MVC应用程序使用axd格式文件 axd格式文件,不管是在asp.net还是现在开发asp.net MVC应用程序,都是Insus.NET较喜欢使用的. 因为我们可以虚拟一个在应用程序 ...

  8. 用C++进行简单的文件I/O操作-转自VC知识库

    原文请见 http://www.vckbase.com/index.php/wv/1158 序论 我曾发表过文件输入输出的文章,现在觉得有必要再写一点.文件 I/O 在C++中比烤蛋糕简单多了. 在这 ...

  9. 正则表达式测试分析工具Expresso

    正则表达式测试分析工具Expresso 一个正则表达式的小工具--myRegexHelper   把以前做的一个功能抽取出来做成一个小的正则表达式测试工具.没什么特色,有两点功能: 一.方便的测试正则 ...

  10. ImageMagick利用蒙版合成图片

    先看合成后的效果图. 需要的图片素材: 1.一张图片(335x600) 2.一张蒙版图片(335x600) 3.一张相框图片(335x600) 第一步,根据蒙板和图片,截取图片.而且所截取的图片之外的 ...