chrome动态ip python_技术 | Python中的从零开始系列连载(四十)

25dc6efed21f9651371e37144bb1b7af.gif

导读

为了解答大家学习Python时遇到各种常见问题,小灯塔特地整理了一系列从零开始的入门到熟练的系列连载,每周五准时推出,欢迎大家学积极学习转载~

在爬取网站信息的过程中,有些网站为了防止爬虫,可能会限制每个ip的访问速度或访问次数。对于限制访问速度的情况,我们可以通过time.sleep进行短暂休眠后再次爬取。对于限制ip访问次数的时候我们需要通过代理ip轮换去访问目标网址。所以建立并维护好一个有效的代理ip池也是爬虫的一个准备工作。

网上提供免费代理ip的网址很多,下面我们以西刺网站为例来建立一个有效的代理ip池。

项目流程:

7408678d196ced985a9aadae622e9d15.png

第一步:构造请求代理ip网站链接

def get_url(url):     # 国内高匿代理的链接
   url_list = []for i in range(1,100):
       url_new = url + str(i)
       url_list.append(url_new)return url_list

get_url :生成要爬取目标网址的链接

第二步:获取网页内容

def get_content(url):     # 获取网页内容
   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=url, headers=headers)
   res = urllib.request.urlopen(req)
   content = res.read()return content.decode('utf-8')

get_content:接受的参数是传入的目标网站链接

第三步:提取网页中ip地址和端口号信息

def get_info(content):      # 提取网页信息 / ip 端口
   datas_ip = etree.HTML(content).xpath('//table[contains(@id,"ip_list")]/tr/td[2]/text()')
   datas_port = etree.HTML(content).xpath('//table[contains(@id,"ip_list")]/tr/td[3]/text()')with open("data.txt", "w") as fd:for i in range(0,len(datas_ip)):
           out = u""
           out += u"" + datas_ip[i]
           out += u":" + datas_port[i]
           fd.write(out + u"\n")     # 所有ip和端口号写入data文件

get_info:接收从get_content函数传来的网页内容,并使用etree解析出ip和端口号,将端口号和ip写入data.

第四步:验证代理ip的有效性

def verif_ip(ip,port):    # 验证ip有效性
   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}
   proxy = {'http':'http://%s:%s'%(ip,port)}
   print(proxy)
   proxy_handler = urllib.request.ProxyHandler(proxy)
   opener = urllib.request.build_opener(proxy_handler)
   urllib.request.install_opener(opener)
   test_url = "https://www.baidu.com/"
   req = urllib.request.Request(url=test_url,headers=headers)
   time.sleep(6)try:
       res = urllib.request.urlopen(req)
       time.sleep(3)
       content = res.read()if content:
           print('that is ok')with open("data2.txt", "a") as fd:       # 有效ip保存到data2文件夹
               fd.write(ip + u":" + port)
               fd.write("\n")else:
           print('its not ok')except urllib.request.URLError as e:
       print(e.reason)

verif_ip:使用ProxyHandler建立代理,使用代理ip访问某网址,查看是否得到响应。如数据有效,则保存到data2.txt文件

最后:调用各个函数

if __name__ == '__main__':
   url = 'http://www.xicidaili.com/nn/'
   url_list = get_url(url)for i in url_list:
       print(i)
       content = get_content(i)
       time.sleep(3)
       get_info(content)with open("dali.txt", "r") as fd:
       datas = fd.readlines()for data in datas:
           print(data.split(u":")[0])# print('%d : %d'%(out[0],out[1]))
           verif_ip(data.split(u":")[0],data.split(u":")[1])

得到爬取结果

c73bf51d19f24ca96ac7c52116e517af.png

好啦,这期的分享先到这里,大家可以按照上面的详细步骤进行练习。加油,我们下周五不见不散~

文章来源:Python爱好者社区

文章编辑:思加

往期文章:

技术 | Python从零开始系列连载(三十九)

技术 | Python从零开始系列连载(三十八)

技术 | Python从零开始系列连载(三十七)

技术 | Python从零开始系列连载(三十六)

技术 | Python从零开始系列连载(三十五)

技术 | Python从零开始系列连载(三十四)

技术 | Python从零开始系列连载(三十三)

技术 | Python从零开始系列连载(三十二)

技术 | Python从零开始系列连载(三十一)

技术 | Python从零开始系列连载(三十)

技术 | Python从零开始系列连载(二十九)

技术 | Python从零开始系列连载(二十八)

技术 | Python从零开始系列连载(二十七)

技术 | Python从零开始系列连载(二十六)

技术 | Python从零开始系列连载(二十五)

技术 | Python从零开始系列连载(二十四)

技术 | Python从零开始系列连载(二十三)

技术 | Python从零开始系列连载(二十二)

技术 | Python从零开始系列连载(二十一)

技术 | Python从零开始系列连载(二十)

技术 | Python从零开始系列连载(十九)

技术 | Python从零开始系列连载(十八)

技术 | Python从零开始系列连载(十七)

技术 | Python从零开始系列连载(十六)

技术 | Python从零开始系列连载(十五)

技术 | Python从零开始系列连载(十四)

技术 | Python从零开始系列连载(十三)

技术 | Python从零开始系列连载(十二)

技术 | Python从零开始系列连载(十一)

技术 | Python从零开始系列连载(十)

技术 | Python从零开始系列连载(九)

技术 | Python从零开始系列连载(八)

技术 | Python从零开始系列连载(七)

技术 | Python从零开始系列连载(六)

技术 | Python从零开始系列连载(五)

技术 | Python从零开始系列连载(四)

技术 | Python从零开始系列连载(三)

技术 | Python从零开始系列连载(二)

技术 | Python从零开始系列连载(一)

【灯塔大数据】微信公众号介绍:中国电信北京研究院通过整合电信自有数据、互联网数据和线下数据,创建了业内领先的“灯塔”大数据行业应用平台,致力于与行业合作伙伴共同打造大数据行业应用生态圈。

微信公众号【灯塔大数据】关键字信息:

【区块链】下载《2018中国区块链行业分析报告》

【物联网】下载《物联网+:制造业向智能服务转型的新引擎》全文

【投资分析】获取美国人工智能投资报告完整版全文

【普华永道】下载《普华永道:区块链让城市更智能》全文

【思维导图】下载12种工具的获取方式

【半月刊】下载大数据瞭望半月刊

【 灯塔 】 查看更多关键字回复

99ba341cc90402bd24d6c5e779e59180.png 9e04ace672871ae95fb56ec8325cf2b8.gif

点击

阅读原文

了解更多详情

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值