专栏首页企鹅号快讯左手用R右手Python系列——多进程/线程数据抓取与网页请求

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

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

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,以防过早被封杀。

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • java与ruby的直观比较

    以前花过一段时间学习ruby,还顺便写了个股票爬虫,搭了数据展示网站,这次回顾一下以前的知识点,将ruby与java作个简单而直观的比较,这样有助于更深入地理解...

    企鹅号小编
  • 当你在 Linux 上启动一个进程时会发生什么?

    英文:Julia Evans,编译:Linux中国 / jessie-pang linux.cn/article-9256-1.html 本文是关于 fork ...

    企鹅号小编
  • 攻击生物识别验证,可以分哪几步?

    刷脸乘车、刷脸支付、刷脸解锁手机......从钱包到手机,这一次干脆彻底解放。生活中似乎不会再有忘带现金、忘记密码的尴尬,因为没有人出门会忘记”带脸“。现实真魔...

    企鹅号小编
  • APP&游戏需要关注Jank卡顿吗?

        本次技术干货分享主要是讲解PerfDog卡顿Jank定义、原理及影响。内容将分为五部分:FrameTime、FPS、流畅度、Jank、影响。从深层次分析...

    WeTest质量开放平台团队
  • 【PerfDog专家课堂】APP&游戏需要关注Jank卡顿吗?

    导语   本次技术干货分享主要是讲解PerfDog卡顿Jank定义、原理及影响。内容将分为五部分:FrameTime、FPS、流畅度、Jank、影响。从深层次...

    WeTest质量开放平台团队
  • 判断大小端的几种方法

    Qt君
  • 新一代垃圾回收器ZGC的探索与实践

    很多低延迟高可用Java服务的系统可用性经常受GC停顿的困扰,作为新一代的低延迟垃圾回收器,ZGC在大内存低延迟服务的内存管理和回收方面,有着非常不错的表现。

    美团技术团队
  • 要学习编程?这10件事情你知道了吗?

    学习编程绝不是容易的事情。在livecoding.tv发表的一篇博文中,与初学者分享了在学习编程前需要知道的10件事情。如果你也是初学者,值得看看以下的内容,以...

    LiveEdu
  • 提供一个10分钟跑通 AI Challenger 细粒度用户评论情感分析的fastText Baseline

    上一篇《AI Challenger 2018 进行时》文尾我们提到 AI Challenger 官方已经在 GitHub 上提供了多个赛道的 Baseline...

    AINLP
  • 机器人程序设计_ROS_note1

    凌川江雪

扫码关注云+社区

领取腾讯云代金券