python爬虫设置代理ip池——方法(二)

python爬虫设置代理ip池——方法(二)


免费代理IP非常适合对IP数量要求较小的这类人群,如果你是做网络爬虫,或者是需求大量代理IP资源的公司或工作室,小编还是推荐使用付费代理IP更省时省力,那具体如何使用代理IP资源呢?下文将以芝麻代理为例。


一、官方给出的Python接入代理ip demo

Python http/sock5:#coding=utf-8
import requests#请求地址
targetUrl = "http://baidu.com"#代理服务器
proxyHost = "ip"
proxyPort = "port"proxyMeta = "http://%(host)s:%(port)s" % {"host" : proxyHost,"port" : proxyPort,
}#pip install -U requests[socks]  socks5代理
# proxyMeta = "socks5://%(host)s:%(port)s" % {#     "host" : proxyHost,#     "port" : proxyPort,# }proxies = {"http"  : proxyMeta,"https" : proxyMeta,
}resp = requests.get(targetUrl, proxies=proxies)
print resp.status_code
print resp.text

注:
小编觉得官网给的代码很简单,但实际用起来还是会遇到很多问题的,这里小编给出一个实例,这样更有助于理解使用。

二、思路

  1. 从代理网站上获取代理ip列表
  2. 格式化代理ip
  3. 使用代理ip爬取网页

三、具体实现步骤

  1. 从代理网站上获取ip列表
def get_ip_list():print("正在获取代理列表...")url=" " #从代理网站上获取的urlpage = requests.get(url)iplist = page.textip_list = iplist.split('
')print(len(ip_list)-1)if len(ip_list)==1:print("ip获取失败")print("代理列表抓取成功……")return ip_list[:-1]

我们先来看一下如何芝麻http上获取ip,如下图是我的url连接生成过程:

这里写图片描述

注意:

  1. ip存活时长:官方说是当你开始使用该ip时,ip寿命开始倒计时,但经过小编多次亲测发现,其实当你将其从列表中取出时已经开始计时了。举个例子,一次取ip存活时长5-25分钟的4个ip1、ip2、ip3、ip4,ip1的寿命可能为5分钟,ip3的可能为15分钟,当4个ip同时取出时,它们就像装了计时器一样同时开始倒计时,然后在5到25分钟内随机死亡。所以建议根据同时并发使用的ip量选择一次取出的ip数量,比如本案例中,一次只使用1个ip,那么我们应该一次取出一个,但为了保险一个取两个。

  2. ip套餐选择:每天免费赠送20个,对于爬取数量较少的爬虫应该是够用了,只是稳定时长是5到25分钟,容易出点小bug。如果想购买的话建议选择套餐啦,这个嘛,咨询客服比较好啦。

2.格式化代理ip

#格式化ip,获取一个proxise
def get_proxies(ip):proxy_ip = 'http://' + ipproxies = {'http': proxy_ip}return proxies

3.使用代理ip爬取网页

#getHTMLText(url,proxies)这是一个通用的爬虫框架应该不陌生
def getHTMLText(url,proxies):    try:r = requests.get(url,proxies=proxies)r.raise_for_status()r.encoding = r.apparent_encodingexcept (requests.exceptions.ConnectionError,ConnectionError):return 0except:return 0else:return r.textdef main():#找到访问网站的url构造规律,构造urlstart_url = ''ur=''       iplist = get_ip_list()i = 1     #标记当前爬取页面page=1000 #page值可以用用类似原理按需获取,这里假设爬取某个网站的1000页数据while i<= page:iplist = get_ip_list()if len(iplist) == 0:j = 1while len(iplist) == 0 and j < 10:print("没有可用ip,休眠2秒")time.sleep(2)iplist = get_ip_list()j += 1if len(iplist) == 0:print("多次访问依然没有ip,放弃……")breakfor ip in iplist:while i <= page:print("页码")print(i)         #用于检验爬取页码进度url = start_url + ur + str(i) #构造的待访问网站urlproxies = get_proxies(ip)html = getHTMLText(url, proxies)if html == 0:breakelse:content=get_info(html) #get_info内容解析函数,按照需要自己写吧i+=1if i>page:break     


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部