36
回答
高手问答第 214 期 —— 和你聊聊 Python 绝技:爬虫之术
开发十年,就只剩下这套Java开发体系了   

OSCHINA 本期高手问答(2018 年 10 月 10 日 — 10 月 16 日)我们请来了@梁睿坤 为大家解答关于 Python 爬虫方面的问题。

梁睿坤,现任增增智能科技CEO,从事机器人、视觉智能、语音智能及 IoT 等技术的产品研发与企业经营方面的工作,曾任优晟网络、越维科技公司的CTO。虽然长期身任技术管理职位,但十多年来一直坚持参与第一线的研发工作。擅长敏捷开发模式,推崇端到端及多领域融合的个人技术发展路向,倡导实践先行的学习方法,乐于分享所学所悟,在 Python 与 Javascript 方面有深厚的理论基础与实践经验。

爬虫虽说并不是一门新的技术,但却是一门伴随互联网而生、实用性最强的一门技术。数据分析、大数据、机器学习都离不开数据的“喂养”。数据无处不在,唾手可得,但要从互联网这个无边无际的数据海洋中采集我们所需要的海量的数据却绝非易事,如何能精准、高效、合理、持续而低成本地从互联网中采集所需的数据,这就是爬虫系统要实现的最基本目标。

本期问题内容:

  1. 网络爬虫的应用方向
  2. 网络爬虫开发的关键技术点
  3. 网络爬虫系统的设计要点
  4. 部署网络爬虫的要点

或有其他相关问题,也欢迎大家积极提问。

为了鼓励踊跃提问,@博文视点 会在问答结束后从提问者中抽取 5 名幸运会员赠予《虫术——Python绝技》一书。

购买链接:京东
OSChina 高手问答一贯的风格,不欢迎任何与主题无关的讨论和喷子。
下面欢迎大家就 Python 爬虫方面的问题向@梁睿坤 提问,请直接回帖提问。

举报
局长
发帖于1周前 36回/4K+阅
共有36个答案 最后回答: 20小时前

@梁睿坤 我最想知道的是python这种执行效率低的语言,真的能被写起来简单这个优势盖下去吗,效率低代表着实现同样的负载/运算能力,需要更多的机器才能完成,是不是大公司都不在意这方面的成本,更早的退出功能要比少用物理机器重要的多?

--- 共有 10 条评论 ---
moshengren最大的问题不是开发语言,而是人,很多公司的很多代码写的是很坑的,哪怕用性能很好的开发语言写,他里面给你搞很多无用的逻辑,不光维护性不好,性能也很差。用python的话,如果找几个有经验的写,比搞一帮写垃圾代码的c++要性能好的多,而且成本也省,当然很多老板是宁可多搞些人,场面大比较喜欢 7天前 回复
从入门到转行如果需求经常变动,我感觉还是py这种开发效率高的好一点,用其他语言实现,花费时间更长,成本更高(因为程序员工资高~~~) 7天前 回复
梁睿坤最后,如果考虑到运行成本跑python也未必一定需要一堆的机器,那得最具体总是具体分析。到低需要多少机器来才适合你的项目那你们可以用Docker来做些运行环境具体测算一下。根据我的经验在Linux上跑python和ruby这类项目确实不需要太多担忧性能的问题。 1周前 回复
梁睿坤另一方面,至于公司规模与语言选择也是没有必然联系的,我认为谈性能只能与“开发规模”和“需求的复杂性”相挂钩。如果您身在大公司的话那更应该考虑寻找一些在python方面的能人,毕竟取决程序好坏的最终因素是人而不是语言本身。 1周前 回复
梁睿坤执行速度高的语言开发出来的程序也未必性能高。其次,python 由于学习曲线平缓语言简洁,第三方资源丰富在程序的总体开发时间上会比其它具有天生速度优势的语言来说会更有优势,毕竟大道至简,我们做开发也一样应该追求平衡而不是极端。 1周前 回复

@Fover 你这是一个问得非常好的问题!对于验证滑块可以谓是现在反爬的一招“绝招”,之所以说它“绝”是它非常的麻烦,在此之前我也曾好好进行过公关,原本也想写到书中的但我的方法太过复杂,后来认为并不一定是一个好方法就略掉了。我讲一个思路,你可以试试。我的做法是有两种:

方法一:这个方法比较白痴但简单,首先是降低爬网的频次,然后采用ADSL拨号服务器更换IP,虽然说不可能完全避开验证框,但它出现的机率会小很多而且不怎么需要改代码。

方法二:进行鼠标模拟,滑块大多都在同一水平线上,也就是说是水平运动的,可以先锁定屏幕的Y值,然后先模拟mousedown等画面出现匹配图后截图计算出初始的mouseX和滑倒匹配位置上的mouxeX1,得到这个坐标后模拟鼠标滑动过去就行了。这个方法有点复杂,需要在编写之前收集大量的截图来观察一下滑动验证框的匹配位置和查看当前的HTML代码。

--- 共有 2 条评论 ---
liverxing滑块验证知识一个,现在有图片验证,智能选择验证(例如阿里的数据风控服务的验证码功能),答案验证,拼图验证,这些你都绕不过去的。 20小时前 回复
Fover谢谢解答。 1周前 回复

@梁睿坤 能否利用pypy加速爬虫效率??

--- 共有 1 条评论 ---
梁睿坤pypy我还没尝试过在具体项目中,不过临渊羡鱼,不如退而结网,在你的项目里弄个分支出来试试不就知道效果了 ^_^ 1周前 回复

@梁睿坤 请问如何解决像淘宝商品页面那样,需要移动鼠标到相应位置才进行加载真正图像的情况呢?

@梁睿坤 请问如果需要实时采集国内A股数据,如何在保证质量的情况下降低成本(带宽,存储,服务器等)?

--- 共有 2 条评论 ---
梁睿坤也就是说 240*3000 = 720000 一天内你得拿到72万的数据行,这数据一看不算大,但要考虑反爬因素如果你一分钟去并发个3000爬一次铁定被封,要估算到底要多少机器最简单的做法是要先看看对方封你的临界点是多少,如果500次就封的话,有10个独立IP就基本足够应付而且已经可以有冗余了。 1周前 回复
梁睿坤你这个需求如果要赴诸实施的话将是一个极为庞大的工程。如果要将全A股接近3千支股票的实时数据拉下来,那可以先算算你的IO,每支股票按每一分钟刷新一次来计算的话,早盘是9:30到11:30共 2小时,120分钟,午盘也是2小时,那全天就是一共4小时 240分钟。 1周前 回复
@梁睿坤 如何学习Python。。。java程序员
--- 共有 1 条评论 ---
梁睿坤学python极为容易,由其从C#或者java转来过也不难,python 的参考书极多语法上几个小时基本上就能入门了,python 最难学的反倒是她那个以亿计算的第三方库,想快速入门是没有捷径的,实践才是王道,我的土办法就是先学语法,然后定一个自己感兴趣的课题,一边开发一边学。例如就写个小爬虫。 1周前 回复
采集目标站有反爬虫封ip的话,代理ip一般从什么途径获取,成本怎么样?
--- 共有 1 条评论 ---
梁睿坤你可以参考我书中 5.2.3 化身万千—蜘蛛世界的易容术 一节,里面有详细的介绍 1周前 回复
@梁睿坤 您好,请问对于爬虫新人,您有哪些建议? 比如:注重点,知识面等
--- 共有 1 条评论 ---
梁睿坤HTML、python 和Scrapy会是爬虫最重要的知识点,HTML,python的资料众多越了解对爬虫知识的掌握就越好,而后者则可以参考我书的一二章,里面有详细的介绍。 1天前 回复
顶部