Home  >  Article  >  Backend Development  >  用Python写爬虫,用什么方式、框架比较好?

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

WBOY
WBOYOriginal
2016-06-06 16:23:391959browse

以前只写过很简单的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编写和运行爬虫,欢迎大家来使用拍砖~
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn