手把手教你用免费代理ip爬数据
/1 前言/
玩爬虫的都避免不了各大网站的反爬措施限制,比较常见的是通过固定时间检测某ip地址访问量来判断该用户是否为 “网络机器人”,也就是所谓的爬虫,如果被识别到,就面临被封ip的风险,那样你就不能访问该网址了。
通用的解决办法是用代理ip进行爬取,但是收费的代理ip一般都是比较贵的,网上倒是有很多免费的代理ip网站,但是受时效性影响,大部分地址都不能用,有很多维护代理ip池的教程,即把爬取并检测后能用代理ip放到“代理池里”,等以后要用的时候再从里面提取,在我看来,这种效率比较低,因为这类IP地址很快就失效,我们要做的是边检测边使用,充分保证免费IP的时效性。
/2 抓取IP地址/
下面就开始实战操作。
1.首先我们随便找一个免费代理ip网站,如下图所示。
2、打开网页查看器,分析其网页元素结构,如下图所示。
3、就是一个简单的静态网页,我们用requests和bs4将ip地址和对应端口爬下,如下图所示。
4、每一行ip地址都由5个
标签组成,而我们需要的是第一个标签(对应IP地址)和第2个标签(对应端口),所以从第一个开始,每隔5个取出ip地址(item[::5]),从第二个开始,每隔5个取出对应端口(item[1::5]),参数n为页码,每次只在1页取1个有用的ip地址,最终效果如下图所示:/3 验证IP有效性/
这里把百度百科作为目标网站,这个看似很普通的网站,反爬措施却极为严格,爬不了几条内容就开始请求失败了,下面我以在百度百科查询全国火车站归属地信息为例演示如何使用免费代理ip。
1、首先我在12306上把所有的火车站名都爬下来了,但是没有归属地信息。
2、然后以站名构造百度百科url信息,分析网页元素,把爬取爬取火车站地址信息,网页元素如下图所示:
3、所以,我们只需在class_='basicInfo-item'的标签内容里查找有无“省”或者“市”的字符,然后输出就行了,最后加一个while True循环,当该ip能正常爬数据时,则break该循环;若该ip被禁,则马上重新请求一个新ip进行爬取。直接上代码如下图所示:
4、其中for循环是遍历所有火车站,try是用于检测该ip还能不能用,若不能,则在except里请求1个新ip,爬取效果如下图所示:
下次再遇到爬虫被禁的情况就可以用此办法解决了。
/4 结语/
本文基于Python网络爬虫技术,主要介绍了去IP代理网站上抓取可用IP,并且Python脚本实现验证IP地址的时效性,如遇到爬虫被禁的情况就可以用本文的办法进行解决。
关于本文的代码,小编已经上传到github了,后台回复“IP代理”四个字,即可获取代码链接,如果觉得不错,记得给个star噢!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
关于Java序列化的问题你真的会吗?
引言 在持久化数据对象的时候我们很少使用Java序列化,而是使用数据库等方式来实现。但是在我看来,Java 序列化是一个很重要的内容,序列化不仅可以保存对象到磁盘进行持久化,还可以通过网络传输。在平时的面试当中,序列化也是经常被谈及的一块内容。 谈到序列化时,大家可能知道将类实现Serializable接口就可以达到序列化的目的,但当看到关于序列化的面试题时我们却常常一脸懵逼。 1)可序列化接口和可外部接口的区别是什么? 2)序列化时,你希望某些成员不要序列化?该如何实现? 3)什么是 serialVersionUID ?如果不定义serialVersionUID,会发生什么? 是不是突然发现我们对这些问题其实都还存在很多疑惑?本文将总结一些Java序列化的常见问题,并且通过demo来进行测试和解答。 问题一:什么是 Java 序列化? 序列化是把对象改成可以存到磁盘或通过网络发送到其它运行中的 Java 虚拟机的二进制格式的过程,并可以通过反序列化恢复对象状态。Java 序列化API给开发人员提供了一个标准机制:通过实现 java.io.Serializable 或者 java.io...
- 下一篇
理解了云原生,才能正确迎接云时代的到来
在探讨过无服务器技术《沉寂多年,无服务器爆发,其硬核是什么?丨技术前沿》和裸金属技术《未来将是容器和裸金属的天下,这话有道理吗?| 技术前沿》的发展后,本篇我们讨论云原生(Cloud Native)技术。 如果说无服务器和裸金属的爆发属于间歇性的,那云原生这几年的热度就称得上持续火热,且随着云计算普及进程的不断加深,有愈演愈烈的趋势。今天再谈云原生已经不是少数几个大企业的专属,越来越多的企业正在拥抱它,享受它带来的红利。 究竟什么是云原生?能带来什么价值?本文第一篇将进行全面的梳理,后续将逐步介绍相关的技术和趋势。 云原生四要素 云原生,顾名思义,面向云而设计的。设计的什么?一套方法、一套理念、一套工具…… 最早人们对云计算的认识就是改变了基础资源的使用方式,业务会逐步迁移上云。但现在再看呢?远不止这一点。云计算在重新构建IT运行的规则,“上云”和“云上”是两个概念。上云是过去对云计算的认知,也就是迁移;而云上是现在及未来对云计算的认知,是云上重新构建,这是云原生的本质。 举个例子对比,上云和云上就像后天培养和天生就有,区别是显而易见的。 进一步说,云原生的概念最早由来自Pivotal...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS8编译安装MySQL8.0.19
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Windows10,CentOS7,CentOS8安装Nodejs环境