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

相关文章

来自专栏嵌入式程序猿

Modbus+是Modbus的升级吗?

我们曾在公众号里讲过很多次的Modbus通信,相信广大的猿友已经非常熟悉,Modbus是一种通讯结构简单,广泛应用在智能电子设备之间进行主-从方式通讯。一个Mo...

3496
来自专栏SDNLAB

从NETCONF/YANG看网络配置自动化

1 引子 NETCONF和YANG的目的是以可编程的方式实现网络配置的自动化,从而简化和加快网络设备和服务的部署,为网络运营商和企业用户节约成本。NETCONF...

3085
来自专栏源哥的专栏

SaaS行业命名规范

    很多企业在启动软件开发的时候,完成没有命名规范,导致代码的可读性极差。而业界对于命名,却没有一个统一的命名规范,比如说,获取客户列表,Java类的方法是...

823
来自专栏Golang语言社区

一个简单的游戏服务器框架_游戏开发

最近一段时间不是很忙,就写了一个自己的游戏服务器框架雏形,很多地方还不够完善,但是基本上也算是能够跑起来了。我先从上层结构说起,一直到实现细节吧,想起什么就写...

6476
来自专栏北京马哥教育

常用集群架构实战练习篇

一、简介 企业中常用的web架构主要的目的是实现高可用及其容灾备份,说白了就是让用户有更好的用提体验,一个架构的可用性只有在经历过上线后接受用户的使用才能体现...

4126
来自专栏YG小书屋

ElasticSearch 介绍

2073
来自专栏携程技术中心

干货 | 分布式架构系统生成全局唯一序列号的一个思路

作者简介 丁宜人,10年java开发经验。携程技术中心基础业务研发部用户中心资深java工程师,负责携程账号的基础服务和相关框架组件研发。之前在惠普公司供职6年...

38110
来自专栏Golang语言社区

IM即时通讯实现原理

即时通讯(Instant Messenger,简称IM)软件多是基于TCP/IP和UDP进行通讯的,TCP/IP和UDP都是建立在更低层的IP协议上的两种通讯传...

6038
来自专栏程序员互动联盟

【专业技术】OpenStack的架构详解

OpenStack既是一个社区,也是一个项目和一个开源软件,它提供了一个部署云的操作平台或工具集。其宗旨在于,帮助组织运行为虚拟计算或存储服务的云,为公有云、私...

3508
来自专栏有困难要上,没有困难创造困难也要上!

Apache-Ignite入门实战之一

35411

扫码关注云+社区