Python网络爬虫从入门到精通
上QQ阅读APP看书,第一时间看更新

5.3 代理服务

5.3.1 代理的应用

【例5.12】 通过代理发送请求。(实例位置:资源包\Code\05\12)

在爬取网页的过程中,经常会出现不久前可以爬取的网页现在无法爬取的情况,这是因为IP被爬取网站的服务器所屏蔽了。此时代理服务可以解决这一麻烦,在设置代理时,首先需要找到代理地址,如117.88.176.38,对应的端口号为3000,完整的格式为117.88.176.38:3000。代码如下:

注意

由于示例中代理IP是免费的,所以使用的时间不固定,超出使用的时间范围内该地址将失效。在地址失效时或者地址错误时,控制台将显示如图5.17所示的异常信息。

图5.17 代理地址失效或错误所提示的异常信息

5.3.2 获取免费的代理IP

【例5.13】 获取免费的代理IP。(实例位置:资源包\Code\05\13)

为了避免爬取目标网页的后台服务器,对我们实施封锁IP的操作。我们可以每发送一次网络请求更换一个IP,从而降低被发现的风险。其实在获取免费的代理IP之前,需要先找到提供免费代理IP的网页,然后通过爬虫技术将大量的代理IP提取并保存至文件中。以某免费代理IP网页为例,实现代码如下:

程序代码运行后控制台将显示如图5.18所示的代理IP与对应端口,项目文件中将自动生成ip.xlsx文件,文件内容如图5.19所示。

图5.18 控制台显示代理IP与对应端口

图5.19 ip.xlsx内容

5.3.3 检测代理IP是否有效

【例5.14】 检测代理IP是否有效。(实例位置:资源包\Code\05\14)

提供免费代理IP的网页有很多,但是经过测试会发现并不是所有的免费代理IP都是有效的,甚至不是匿名IP(即获取远程访问用户的IP地址是代理服务器的IP地址,不是用户本地真实的IP地址)。所以要使用我们爬取下来的免费代理IP,就需要对这个IP进行检测。

实现检测免费代理IP是否可用时,首先需要读取保存免费代理IP的文件,然后对代理IP进行遍历并使用免费的代理IP发送网络请求,而请求地址可以使用查询IP位置的网页。如果网络请求成功,说明免费的代理IP可以使用,并且还会返回当前免费代理IP的匿名地址。代码如下:

程序运行结果如图5.20所示。

图5.20 打印可用的匿名代理IP