资讯专栏INFORMATION COLUMN

楚江数据:建立爬虫代理ip池

imingyu / 956人阅读

摘要:所以建立并维护好一个有效的代理池也是爬虫的一个准备工作。网上提供免费代理的网址很多,下面我们以西刺网站为例来建立一个有效的代理池。

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

第一步:构造请求代理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])
得到爬取结果

【楚江数据】团队提供网站、手机APP(包括电商、社交网站、公众号、论坛及客户提供的其他类型)爬虫定制开发和数据(文本、图片、电话邮箱、文档等)批量采集服务。不用学编程,不用写代码,我们直接交付采集好的数据或者编写好的程序。
微信:p02721606
官方网站http://www.chujiangdata.com

转载知乎;

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38514.html

相关文章

  • Python入门网络爬虫之精华版

    摘要:学习网络爬虫主要分个大的版块抓取,分析,存储另外,比较常用的爬虫框架,这里最后也详细介绍一下。网络爬虫要做的,简单来说,就是实现浏览器的功能。 Python学习网络爬虫主要分3个大的版块:抓取,分析,存储 另外,比较常用的爬虫框架Scrapy,这里最后也详细介绍一下。 首先列举一下本人总结的相关文章,这些覆盖了入门网络爬虫需要的基本概念和技巧:宁哥的小站-网络爬虫,当我们在浏览器中输入...

    Bmob 评论0 收藏0
  • 面向对象的分布式爬虫框架XXL-CRAWLER

    摘要:面向对象的分布式爬虫框架一简介概述是一个面向对象的分布式爬虫框架。分布式集群集群方式维护爬虫爬虫运行数据,可通过或定制实现。 《面向对象的分布式爬虫框架XXL-CRAWLER》 showImg(https://segmentfault.com/img/remote/1460000011842697);showImg(https://segmentfault.com/img/remote...

    anquan 评论0 收藏0
  • 多线程+代理爬取天天基金网、股票数据(无需使用爬虫框架)

    摘要:本次使用天天基金网进行爬虫,该网站具有反爬机制,同时数量足够大,多线程效果较为明显。技术路线代理池多线程爬虫与反爬编写思路首先,开始分析天天基金网的一些数据。一旦使用多线程,则需要考虑到数据的读写顺序问题。 @[TOC] 简介 提到爬虫,大部分人都会想到使用Scrapy工具,但是仅仅停留在会使用的阶段。为了增加对爬虫机制的理解,我们可以手动实现多线程的爬虫过程,同时,引入IP代理池进行...

    jaysun 评论0 收藏0
  • MongoDB 4.0 Python3.7 稳定高效的评分制IP代理APIserver

    摘要:项目的主要运行部分,采集器验证器打分检测等功能实现的模块。在中可以配置异步的并发量等来控制验证器。调用有了稳定的高分代理数据,那么就可以挂起一个为我们的爬虫保驾护航,这一部分可以单独拿出来编写,使用其他框架之类的都是不错的选择。 FooProxy 稳健高效的评分制 IP代理池 + API服务提供,可以自己插入采集器进行代理IP的爬取,支持 MongoDB 4.0 使用 Python3....

    wangjuntytl 评论0 收藏0
  • MongoDB 4.0 Python3.7 稳定高效的评分制IP代理APIserver

    摘要:项目的主要运行部分,采集器验证器打分检测等功能实现的模块。在中可以配置异步的并发量等来控制验证器。调用有了稳定的高分代理数据,那么就可以挂起一个为我们的爬虫保驾护航,这一部分可以单独拿出来编写,使用其他框架之类的都是不错的选择。 FooProxy 稳健高效的评分制 IP代理池 + API服务提供,可以自己插入采集器进行代理IP的爬取,支持 MongoDB 4.0 使用 Python3....

    AndroidTraveler 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<