广州列举网 > 教育培训 > 电脑/网络 > 优化Python爬虫速度的方法广州中软卓越
广州
[切换城市]

优化Python爬虫速度的方法广州中软卓越

更新时间:2018-04-26 17:42:42 浏览次数:124次
区域: 广州 > 广州周边
类别:软件工程师培训
地址:广州
如何优化Python爬虫的速度
近看到有人问关于Python爬虫的速度,单线程 urllib 感觉过于慢了,达不到数据量的要求(十万级页面)。那么有哪些可以提高爬取效率的方法呢?一起来看看吧!
首先要先判断准目前的瓶颈在哪里,网络io、磁盘io,还是cpu等。然后才能具体问题具体分析。
如果编程能力是瓶颈的话,增加多线程的特性是具性价比的了,而且花不了多少开发的时间。不过后续的问题可能就比较多了。代码也不是几行能搞定的了。cpu瓶颈的话可以通过分布式的方式来解决,更多的结点去处理分发的任务就好了;本地带宽的瓶颈通过云服务器解决(一般都有100MB的方案提供),定时定量的去购买使用可以节约成本(毕竟不是搜索引擎不会一直开着的),目标服务器的带宽限制(基于IP的)通过跨区的服务器解决,云服务器提供商有多个机房的,分散节点所在的机房可以缓解问题,有提供动态ip的就更好了。
目标服务器的访问限制:
可以搜<反爬虫>策略有很多相关知识,可以根据自己的编程能力来应对,这里推荐两个库 Selenium PhantomJS。对于验证码相关的可以考虑购买服务,有外包的,真的不建议自己弄。
目标网站系统比较知名的话(discuz)可以网上搜搜,足够简单的话可以用opencv(有python绑定的版本而且跨平台),thredshold(二值化)处理颜色, eroded/dilate(腐蚀膨胀)处理噪点, findContours(查找轮廓)处理字符分割,穷举旋转和简单扭曲再匹配字库差不多就可以处理2010以前的简单二维码了(当然cpu开销还是很大的)
下面再说说几个常规爬虫可能不会涉及到的:
文件系统的瓶颈
如果需要保存爬下来的文件, 那文件系统在单个文件夹下文件过多时的性能下降就要考虑了,考虑编码瓶颈起码的目录要独立文件管理了(10w+的时候)因为列目录就可能卡机了,如果是桌面端的话就得重启了,能编码的话可以考虑简单的进行额外的管理(数据库管理也是不错的选择。
可视化/工具化的瓶颈
需要做成工具的要考虑这个问题(比如Golang的Pholcus), 桌面开发有瓶颈的话可以做Web版本的界面,需要跨平台的界面则需要第三方的框架支持比较好,但更重要的是, 爬虫的进度需要可见, 所以之前的设计如果没有考虑这点的话, 改动会比较大,针对大文件可能需要详细的进度(这样阻塞模式的下载就不太靠谱了)需要多线程断点续传(这个改动更大)任务本身也可能需要考虑持久化了。
还有网友分享关于用node写爬虫的经验分享,虽然语言不同,但技术是相通的,希望能有帮助吧。
node写的爬虫,单进程,总访问量在24w左右,完全抓取一次大概在80分钟左右,瓶颈主要在带宽和网站限制上。
优化技巧总结起来无外乎多线程,提高吞吐率上
1、数据抓取和数据处理分离,使用多线程或多进程将两个任务分开处理,避免互相影响
2、使用多线程在不被封锁的情况下尽量多的抓取网页,视数据量决定抓取的内容存放在内存中或硬盘中
3、使用流水线思维加多线程实现页面处理流水线化,将爬虫逻辑分为数据抓取、数据预处理,数据处理,数据保存几个步骤,步骤之间相互并行
4、有一个经常被忽视的地方需要注意,如果数据抓取速度过快,那么爬虫的瓶颈往往在cpu上,而cpu主要消耗在对html的解析上,必要时需要自己实现一个基于字符串查找的html解析器,可以这一瓶颈。
上述的内容希望对大家有帮助,后续会继续更新相关实用知识,有需要的可以关注留意。广州中软卓越Python培训www.***.cn
广州电脑/网络相关信息
2023-04-08 刷新
2022-12-06
2022-10-07
注册时间:2018年04月10日
UID:476073
---------- 认证信息 ----------
手机已认证
查看用户主页