Rumah  >  Artikel  >  pembangunan bahagian belakang  >  用Python写爬虫,用什么方式、框架比较好?

用Python写爬虫,用什么方式、框架比较好?

WBOY
WBOYasal
2016-06-06 16:23:392003semak imbas

以前只写过很简单的Python爬虫,直接用内置库实现,有没有谁用Python爬过规模较大的数据,用的是什么方法?
还有,采用现有的Python爬虫框架,相比与直接使用内置库,优势在哪?因为Python本身写爬虫已经很简单了。

回复内容:

可以看看 Scrapy ( scrapy.org/ ),基于这个框架来写自己的爬虫 由于项目需求收集并使用过一些爬虫相关库,做过一些对比分析。以下是我接触过的一些库:
  • Beautiful Soup。名气大,整合了一些常用爬虫需求。缺点:不能加载JS。
  • Scrapy。看起来很强大的爬虫框架,可以满足简单的页面爬取(比如可以明确获知url pattern的情况)。用这个框架可以轻松爬下来如亚马逊商品信息之类的数据。但是对于稍微复杂一点的页面,如weibo的页面信息,这个框架就满足不了需求了。
  • mechanize。优点:可以加载JS。缺点:文档严重缺失。不过通过官方的example以及人肉尝试的方法,还是勉强能用的。
  • selenium。这是一个调用浏览器的driver,通过这个库你可以直接调用浏览器完成某些操作,比如输入验证码。
  • cola。一个分布式爬虫框架。项目整体设计有点糟,模块间耦合度较高,不过值得借鉴。

以下是我的一些实践经验:

  • 对于简单的需求,比如有固定pattern的信息,怎么搞都是可以的。
  • 对于较为复杂的需求,比如爬取动态页面、涉及状态转换、涉及反爬虫机制、涉及高并发,这种情况下是很难找到一个契合需求的库的,很多东西只能自己写。

至于题主提到的:

还有,采用现有的Python爬虫框架,相比与直接使用内置库,优势在哪?因为Python本身写爬虫已经很简单了。

third party library可以做到built-in library做不到或者做起来很困难的事情,仅此而已。还有就是,爬虫简不简单,完全取决于需求,跟Python是没什么关系的。 要处理 js 运行后的结果,可以使用 html5lib。
但我觉得最好的是用 beautifulsoup4 的接口,让它内部用 html5lib。 自己写爬虫的话,用一些异步事件驱动库,如gevent,比单纯多线程要好很多。 大二的时候写了一个网络爬虫 爬取 amazon.com的某类商品的bestseller top100 的所有评论。

也不用什么框架,在linux下用的叫做 beautifulsoup的库帮助解析html,正则表达式也可以啦 不过好麻烦。

爬虫好慢啦,有个小技巧是走代理,因为是外国网站嘛,非常慢,而且可以防止同一个ip访问次数太多。

大概有几万个网页吧,然后用beautifsoup解析,挑一些自己感兴趣的数据,比如打分、评论、商家、分类什么的。然后用一些科学库做一些简单的统计和报表,比如 numpy、scipy、matplotlib等。网上也有好多数据生成报表的 js 库,很酷炫,也很不错的 :)

恩,就是这样。 我也来回答一下吧.

如果楼主想爬去更大规模的东西,可以有两种方案,一种自己写一个爬虫框架,另一总通过爬虫框架.
1,自己动手写一个爬虫框架,我没写过没法说
2,通过线程的爬虫框框架.
用的比较多的是scrapy,首先scrapy异步,然后scrapy可以写成分布式爬虫.这样面对大数据再也不用爬一辈子啦.
另外还有pyspider,sola等.更多的爬虫我也在收集中,不过如果你要着手开始用框架的话,大概只能找到这两个,究其原因,还是因为很多框架是是英语写的吧,大部分不愿意爬英语的坑.

还有有人提到cola,这个是国人写的,作者这样说过
靠,以前只是听过scrapy,从来没去看过,刚看了一下,发现除了分布式的部分,竟然真挺像的。
从scrapy倒是有启发可以保存json文件的形式,减少对数据库的依赖。

想了一下,分布式还是我的初衷,真没想到其他部分这么相近。
其实用那个框架到不是一件值得纠结的事,因为几乎没得选.

第二个问题.python自己的类库和框架有什么区别?
你问这样的问题,是因为,你现在爬的需求还很简单!!
仅仅是爬静态页的话,而且爬不了多少个,真心建议你喜欢什么就用什么好了,或者直接就用类库吧,推荐requests,几行代码就搞定了

但是,生活中不光有静态页这种东西啊,还有ajax,还有js,还有各种各样莫名其妙的细节.

而细节是相当可怕的存在,比如,数据的提取,用正则还是xpath,为什么不是所有的页面都有下一页,一晚上爬了5000条数据,我一共有20万条怎么办,爬虫又被封了,我靠.

有时候想想自己真够坚定不移的.也真是烦

这个时候,你就会知道框架的好处了,框架最大的作用,在于用最简单的方法帮助你实现需求,也就是说,如果你现在可以很好的满足工作的需要,那就不要看框架,如果工作有些吃力,那就去看看吧,说不定别人已经造好了轮子,等着你推车呢!老汉!

cola的链接给你吧
Cola:一个分布式爬虫框架
scrapy百度就是
pyspider还没用 这个要看个人了,开始可以先看scrapy方面的内容,然后结合redis,实现分布式,具体实现可以参考github上的代码,如chineking/cola · GitHub
存储的话,需要mongodb,要深入的话,这方面的内容还是挺多,而且mongodb可以实现集群式存储,完全可以满足楼主的要求。
框架有很多,比如爬虫框架 | 为自己写代码,楼主可以尝试下。
爬取大规模的数据其实可以通过分布式来实现。 我的博客里有很详细的叙述和源码,python3.4实现。
欢迎交流 网络资源搜索爬虫(python 3.4.1实现) 写了一个小爬虫爬学校学生的照片成绩,爬了三四天。好几次都是卡死 我开发了一个云端爬虫开发框架:神箭手,可以让开发者在云上使用Javascript编写和运行爬虫,欢迎大家来使用拍砖~
Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn