前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >左手用R右手Python系列——多进程/线程数据抓取与网页请求

左手用R右手Python系列——多进程/线程数据抓取与网页请求

作者头像
企鹅号小编
发布2018-02-23 15:27:42
1K0
发布2018-02-23 15:27:42
举报
文章被收录于专栏:企鹅号快讯企鹅号快讯

这一篇涉及到如何在网页请求环节使用多进程任务处理功能,因为网页请求涉及到两个重要问题:一是多进程的并发操作会面临更大的反爬风险,所以面临更严峻的反爬风险,二是抓取网页数据需要获取返回值,而且这些返回值需要汇集成一个关系表(数据框)(区别于上一篇中的二进制文件下载,文件下载仅仅执行语句块命令即可,无需收集返回值)。

R语言使用RCurl+XML,Python使用urllib+lxml。

方案1——自建显式循环:

整个过程耗时11.03秒。

方案2——使用向量化函数:

整个过程耗时9.07m。

方案3——使用多进程包:

总耗时5.14秒。

这里解释一下昨天的多进程下载pdf文件为何没有任何效果,我觉得是因为,对于网络I/O密集型的任务,网络下载过程带宽不足,耗时太久,几乎掩盖了多进程的时间节省(pdf文件平均5m)。

Python版:

Python的案例使用urllib、lxml包进行演示。

方案1——使用显式循环抓取:

总耗时将近19秒,(代码中设置有时延,估测净时间在9秒左右)

方案2——使用多线程方式抓取:

以上多进程模式仅使用了1.64m,多进程爬虫的优势与单进程相比效率非常明显。

方案3——使用多进程方式抓取:

最后的多进程执行时间差不多也在1.5s左右,但是因为windows的forks问题,不能直接在编辑器中执行,需要将多进程的代码放在.py文件,然后将.py文件在cmd或者PowerShell中执行。

c从今天这些案例可以看出,对于网络I/O密集型任务而言,多线程和多进程确实可以提升任务效率,但是速度越快也意味着面临着更大的反爬压力,特别是在多进程/多线程环境下,并发处理需要做更加加完善的伪装措施,比如考虑提供随机UA/IP,以防过早被封杀。

本文来自企鹅号 - 数据小魔方媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - 数据小魔方媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档