实验4:Python爬虫代理的使用
【实验内容】
本实验主要介绍在爬虫采集数据的过程中代理的使用。
【实验目的】
1、掌握代理使用的基本场景;
2、解决IP封锁问题;
3、提高爬虫访问效率;
【实验步骤】
步骤1选择代理服务提供商
步骤2配置爬虫使用代理
步骤3 采集数据生成json文件
步骤1选择代理服务提供商
(1) 代理的概念
代理(Proxy)是一种网络服务,它充当客户端和目标服务器之间的中介,接受来自客户端的请求并将其转发给目标服务器。代理可以修改、过滤、缓存请求,同时也可以隐藏客户端的真实IP地址。在网络爬虫和其他网络应用中,代理通常用于实现以下目的:
- 隐藏真实IP地址
- 绕过IP封锁提高访问速度和效率
- 访问受限制的内容
- 实现负载均衡
(2) 选择代理服务商
有许多代理服务商提供各种类型的代理服务,包括HTTP、HTTPS、Socks5等。以下是一些常见的代理服务商,它们提供了不同类型的代理,适用于各种需求。
- 阿布云(Abuyun)
- 快代理(Kuai Proxy)
- 芝麻代理(ZhiMa Proxy)
本次实验以快代理为例。
注册登录账号后,选择购买如所示的代理(以隧道代理为例)。
***************************************************************************
购买完成后回到账户管理页面,在我的订单可以看到刚刚购买的产品。
***************************************************************************
步骤2配置爬虫使用代理
以四川政府采购中标数据为例(http://www.ccgp-sichuan.gov.cn/),在不使用代理对该网址进行高频率数据采集时,本机ip会被该网址进行屏蔽,返回空数据,此时就需要代理ip 的介入。
***************************************************************************
配置代理ip,将其封装为一个函数,这样便于整个项目的使用。
***************************************************************************
步骤3 采集数据生成json文件
(1) 获取子页面链接
分析该网址很容易发现该网页使用ajax发送请求返回数据,因此我们只需要对该接口发送请求就可以获得子页面的数据。
/*=====================================================================*/
************************************************************************
从返回的数据中解析出子链接、地区名、地区码,将其传递给parse_html解析页面。
(2) 解析子页面数据
/*======================================================================================================================================*/
*********************************************************************
使用lxml.html的clean模块将返回的文本内容进行清理,去除掉<script> <style> 等标签。
*********************************************************************
使用lxml库中的etree模块,将清理后的HTML文本解析成一个XPath可操作的树形结构。使用XPath选择器定位id为’source’的span元素,提取其中的文本内容。 /*========================================================================================*/
*********************************************************************
使用XPath选择器定位id为’noticeTime’的span元素下的i元素,提取其中的文本内容。 /*==================================================================================================*/
*********************************************************************
(3) 保存为json文件
/===============================================================================================================================================*/
文件部分内容如下:
*********************************************************************