左手用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 条评论
登录 后参与评论

相关文章

来自专栏微信终端开发团队的专栏

Android微信上的Wear的开发总结

2014年3月19日,Google发布为智能手表打造的全新智能平台Android Wear,微信于6.0.2版本开始支持,Google对And...

2309
来自专栏Grace development

PHP程序员如何简单的开展服务治理架构(二)

服务治理 治理的绝笔是服务,在一家公司有玩各种语言的程序员,如何去统一管理他们开发的服务,这是一个问题。

932
来自专栏IT派

用 Python 实现每秒处理 120 万次 HTTP 请求

用 Python 做到每秒处理上百万次 HTTP 请求,可能吗?也许不能,但直到最近,这已成为现实。

1123
来自专栏PingCAP的专栏

性能测试工具的 Coordinated Omission 问题

很早之前就看过 Gil 大神的一篇文章《Your Load Generator Is Probably Lying To You - Take The Red ...

2105
来自专栏腾讯云Elasticsearch Service

Elasticsearch最佳实践之搭建日志分析平台

(本次课程是通过小程序对外推广的,所以PPT是竖版的。电脑端浏览体验可能不太好,望大家见谅)

1511
来自专栏互联网杂技

程序员保证能笑出腹肌

客户需求 vs 最终产品 ? requirements vs. implementation 程序员的一天 ? The Programmers life 寂寞...

3397
来自专栏Elasticsearch实验室

基于Elastic Stack搭建日志分析平台

(本次课程是通过小程序对外推广的,所以PPT是竖版的。电脑端浏览体验可能不太好,望大家见谅)

1936
来自专栏杨建荣的学习笔记

关于闪回区溢出导致的数据hang(r11笔记第12天)

对于Oracle数据库的闪回区的设置,之前和一个同事和讨论过,总体来说有一些不同的意见。 首先这个闪回区是一个逻辑的概念,闪回区的大小不会严格依赖于磁盘空间的情...

34513
来自专栏腾讯IVWEB团队的专栏

React-Native 通用化建设与性能优化

本文主要介绍 react-native通用化建设以及对 react-native项目进行性能优化的方案,总体来讲主要围绕以下四个方面展开:通用化建设、本地分包、...

9470
来自专栏搜云库

手把手教你 MongoDB 的安装与详细使用(一)

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

3707

扫码关注云+社区