代理ip软件

您的位置: 首页 > 新闻资讯 > 正文

Python爬虫方式抓取免费代理IP

发布时间:2020-02-05 14:58:19 来源:挂机精灵

  我们新手在练手的时候,常常需要一些代理ip进行爬虫抓取,但是因为学习阶段,对IP质量要求不高,主要是弄懂原理,所以花钱购买就显得没必要(大款忽略),今天跟大家分享一下,如果使用爬虫抓取免费的代理IP。

  由于某些网站对会对爬虫做限制,因此常常需要通过代理将爬虫的实际IP隐蔽起来,代理也有分类,如透明代理,高匿代理等。

  本文主要讲述如何获取代理IP,并且如何存储和使用。

Python爬虫方式抓取免费代理IP

  如何获取并存储这些代理IP?一般的流程为:解析当前页面–>存储当前页面的代理IP–>跳转到下一页面,重复该流程即可。

  解析页面

  首先要解析页面,由于网页中显示代理IP时是在表格中显示的,因此只需要通过找出网页源码中相关的表格元素即可。下面是通过python中的requests和bs4获取页面http://www.xicidaili.com/nt/上显示的IP及端口。

  import requestsfrom bs4 import BeautifulSoupuser_agent='Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebKit/537.36(KHTML,like Gecko)Chrome/51.0.2704.106 Safari/537.36'referer='http://www.xicidaili.com/'headers={'user-agent':user_agent,'referer':referer}target='http://www.xicidaili.com/nt/'#获取页面源码r=requests.get(target,headers=headers)#解析页面源码soup=BeautifulSoup(r.text,'lxml')for tr in soup.find_all('tr')[1:]:tds=tr.find_all('td')proxy=tds[1].text+':'+tds[2].text print proxy

  输出如下:

  36.235.1.189:3128219.141.225.149:80125.44.132.44:9999123.249.8.100:3128183.54.30.186:9999110.211.45.228:9000

  代理IP的存储

  上面代码获取的代理IP可以通过在代码一开始建立一个集合(set)来存储,这种情况适用于一次性使用这些代理IP,当程序发生异常或正常退出后,这些存储在内存中的代理IP也会丢失。但是爬虫中使用代理IP的情况又是非常多的,所以有必要把这些IP存储起来,从而可以让程序多次利用。

  这里主要通过redis数据库存储这些代理IP,redis是一个NOSQL数据库,具体使用参照官方文档,这里不做详细解释。

  下面是ConnectRedis.py文件,用于连接redis

  import redisHOST='XXX.XXX.XXX.XXX'#redis所在主机IPPORT=6379#redis服务监听的端口PASSWORD='XXXXXX'#连接redis的密码DB=0#IP存储的DB编号def get_connection():r=redis.Redis(host=HOST,port=PORT,password=PASSWORD,db=DB)return r

  下面是在上面的代码基础上将IP存储到redis中,

  import requestsfrom bs4 import BeautifulSoupfrom ConnectRedis import get_connection#获取redis连接try:conn=get_connection()except Exception:print'Error while connecting to redis'returnuser_agent='Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebKit/537.36(KHTML,like Gecko)Chrome/51.0.2704.106 Safari/537.36'referer='http://www.xicidaili.com/'headers={'user-agent':user_agent,'referer':referer}target='http://www.xicidaili.com/nt/'#获取页面源码r=requests.get(target,headers=headers)#解析页面源码soup=BeautifulSoup(r.text,'lxml')for tr in soup.find_all('tr')[1:]:tds=tr.find_all('td')proxy=tds[1].text+':'+tds[2].text conn.sadd("ip_set",proxy)print'%s added to ip set'%proxy

  上面的conn.sadd(“ip_set”,proxy)将代理proxy加入到redis的集合”ip_set”,这个集合需要预先在redis中创建,否则会出错。

  页面跳转

  上面的代码获取的只是一个页面上显示的代理,显然这个数量不够,一般通过当前页面中的下一页的超链接可以跳转到下一页,但是我们测试的由于每页的的url都有规律,都是http://www.xicidaili.com/nt/page_number,其中的page_number表示当前在哪一页,省略时为第一页。因此,通过一个for循环嵌套上面的代码即可获取多个页面的代理。但是更一般的方法是通过在当前页面获取下一页的超链接而跳转到下一页。

  代理IP的使用

  当我们需要通过代理访问某一网站时,首先需要从redis中随机选出一个代理ip,然后尝试通过代理ip是否能连到我们需要访问的目标网站,因为这些代理IP是公共使用的,所以往往也会被封的很快,假如通过代理无法访问目标网站,那么就要从数据库中删除这个代理IP。反之即可通过此代理访问目标网站

  下面是实现上面所说流程的代码:

  import requestsfrom ConnectRedis import get_connection#判断IP是否能访问目标网站def is_valid(url,ip):proxy={'http':'http://%s'%ip}user_agent='Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebKit/537.36(KHTML,like Gecko)Chrome/51.0.2704.106 Safari/537.36'headers={'user-agent':user_agent}try:r=requests.get(url,headers=headers,proxies=proxy,timeout=6)return True except Exception:return Falseif __name__=='__main__':my_proxy,proxies,ip_set=None,None,'amazon_ips'conn=get_connection()target='https://www.amazon.com/'while not is_valid(target,my_proxy):if my_proxy:conn.srem(ip_set,my_proxy)#删除无效的代理IP if proxies:my_proxy=proxies.pop()else:proxies=conn.srandmember(ip_set,5)#从redis中随机抽5个代理ip my_proxy=proxies.pop()print'valid proxy%s'%my_proxy

  requests.get(url,headers=headers,proxies=proxy,timeout=6)是通过代理去访问目标网站,超时时间设为6s,也就是说在6秒内网站没有回应或返回错误信息就认为这个代理无效。

  除此之外,在爬取免费提供代理的网站上的代理IP的时候,爬取的速度不要太快,其中的一个原因是爬取太快有可能会被封,另外一个原因是如果每个人都无间隙地从这种网站上爬取,那么网站的负担会比较大,甚至有可能垮掉,因此采用一个可持续爬取的策略非常有必要,我爬取的时候是没爬完一个页面后让程序sleep大概2分钟,这样下来不会被封而且爬取的代理的量也足够使用。实际中可以根据自己使用代理的频率来进行调整。

  当然,免费代理ip毕竟也只能用于练手,免费的ip代理在可用率,速度、安全性上面,都没法跟付费的IP代理对比,尤其是独享的IP代理,所以企业爬虫采集的话,为了更快更稳定的进行业务开展,建议大家购买付费的ip代理,比如挂机精灵,类似的付费代理具有并发高,单次提取200个IP,间隔1秒,所以短时间内可以获取大量IP进行数据采集。


相关资讯

玩游戏都有哪些赚钱的方式方法?玩家们这样说

我以前特别喜欢玩游戏,而且玩任何一款网游,我都是奔着赚钱的目的玩的,我深深的记得,第一款让我赚到钱,也同时被骗的游戏,是个回合制网游,名字就不说了,也关服了,今

来源:互联网

2019-03-13 16:22:04

使用http代理IP有几种授权方式?

使用http代理IP有几种授权方式?挂机精灵种类有5种,分别是短效优质代理、短效socks5代理、一手私密代理、一手socks5代理和独享IP池。很多朋友表示种

来源:挂机精灵

2019-04-18 15:56:49

使用代理服务器的最佳方式

目的主机无法识别您的IP地址,但它知道您正在使用代理切换器服务器。E-lite-目的主机不了解您的IP地址,或者请求已通过代理主机中继。使用代理服务器的最佳方式

来源:挂机精灵

2019-05-05 16:06:57

访问被封网站的几种常见代理服务器方式

被封、被屏蔽的网站可以通过国外代理服务器来访问,下面介绍访问被封网站的几种常见代理服务器方式。第一种:直接使用HTTP代理服务器的IP地址和端口(适用于IE、F

来源:挂机精灵

2019-05-05 16:24:18

正确使用免费代理IP的方式

是不是有的时候上网碰到过这种尴尬的情况,当你一天之内无数次毫频率的拜访一个网站的时候,当你某一下再次进入的时候,发现已经遭到了对方的封锁,哎,上不去了。你这是咋

来源:挂机精灵

2019-05-13 15:34:24

浅谈使用http代理IP的几种授权方式

很多朋友在使用http代理的时候发现需要绑定IP白名单,认为很是麻烦,经常有朋友跟我说,你看看这家、那家都不用绑定白名单的,拿到IP就能直接使用,多方便啊,你们

来源:挂机精灵

2019-07-01 15:35:04

Python爬虫方式抓取免费代理IP

我们新手在练手的时候,常常需要一些代理ip进行爬虫抓取,但是因为学习阶段,对IP质量要求不高,主要是弄懂原理,所以花钱购买就显得没必要(大款忽略),今天跟大家分

来源:挂机精灵

2020-02-05 14:58:19

如何高效获取大数据?ip代理:用爬虫!

在不同的操作系统中,Python存在细微的差别,因此有几点您需要牢记在心。这里小编使用的是Python3版本。Python自带一个在终端窗口中运行的解释器,让您

来源:互联网

2019-03-22 16:27:55

为什么说免费代理IP会有风险

市面上免费代理IP那么多,为什么还有人愿意花钱使用付费代理IP?为什么都说免费代理IP会有风险?下面由小编带大家简单分析一下其中原因。一、免费代理IP传送信息不

来源:挂机精灵

2019-04-26 16:19:23

如何解决python爬虫的IP资源问题

大家都说现在是大数据时代,是python爬虫的天下,但python爬虫也是有天敌的,随着网络爬虫的日渐壮大,反爬虫也在不断进化,若想顺应时代发展,更好的突破网站

来源:互联网

2019-04-01 16:00:58

为何爬虫使用代理IP后依然会抓取不成功?

网络爬虫在如今的互联网领域有着特别的意义,比如我们耳熟能详的大数据,它的发展就离不开网络爬虫。然而网络爬虫也是有天敌的,那就是目标网站的反爬虫策略,爬虫在工作过

来源:挂机精灵

2019-05-06 16:24:05