再次分享 pyspider 爬虫框架

2014-11-16 21:16:51 +08:00
 binux
虽然 252 天前已经分享过,但是第二个里程碑 commit 数已经快到第一个的 2 倍了。。
功能上丰富了非常多,甚至已经部分超过原来不开源的版本了。。
请允许我再次分享一次 pyspider

github 地址: https://github.com/binux/pyspider
demo 地址: http://demo.pyspider.org/ (感谢 @phoenixlzx

* python 脚本,可以用任何你喜欢的 html 解析包(内置 pyquery )
* WEB 界面编写调试脚本,起停脚本,监控执行状态,查看活动历史,获取结果产出
* 支持 MySQL, MongoDB, SQLite
* 支持抓取 JavaScript 的页面
* 组件可替换,支持单机 /分布式部署,支持 Docker 部署
* 强大的调度控制

由于功能太多,更多请参考: https://github.com/binux/pyspider/wiki
pycon 上的 slide: http://www.slideshare.net/roybinux/pyspider-pycon2014beijing

40199 次点击
所在节点    分享创造
96 条回复
bitwing
2014-11-16 21:24:02 +08:00
今天总算看到干货了
phoenixlzx
2014-11-16 21:29:07 +08:00
给点一个大大的赞
pycon 没见到真可惜...
Rabbit52
2014-11-16 21:33:58 +08:00
牛逼,点赞!
binux
2014-11-16 21:37:04 +08:00
@phoenixlzx 给你单独讲一个?
owlsec
2014-11-16 22:21:04 +08:00
赞(≧▽≦)
Rico
2014-11-16 22:31:10 +08:00
赞,正好最近需要.
zxy
2014-11-16 22:32:48 +08:00
赞一个,我特别关注的人😃
pc10201
2014-11-16 22:34:59 +08:00
好像比scrapy强大很多,能给个对比评测就好了~
qianlifeng
2014-11-16 22:42:14 +08:00
看起来很强大,已STAR
binux
2014-11-16 22:42:49 +08:00
@pc10201 主要是很多功能我现在还没闹不明白 scrapy 要怎么实现,如果我出评测的话别人一定说“那是你不会用”。。

而且设计思路上,pyspider 已经是一个架构了,scrapy 是一个包。
就我对 scrapy 的理解

* pyspider 使用 JSON ,不需要预先定义 Item
* 使用真的消息队列,而不需要 Pipeline
* 有真正的链接库,而不是 set集合,能对链接进行重抓调度,抓取更新更灵活方便
* 面向数据包协议编程,而不是面向接口。当需求不满足的时候,甚至可以用其他语言替换某些模块
regmach
2014-11-16 23:14:39 +08:00
已收藏
已感谢
reverland
2014-11-16 23:17:43 +08:00
benjiam
2014-11-16 23:41:15 +08:00
爬虫的几个难点, 链接保存如何,快速检索出已经下载过的链接,bloomfliter太简单了,不用habse这种又貌似没有扩张性,如何区分现在很多带随机数的链接。javascrip生成的页面,js动态跳转,,由ajax和后端交互生成的页面抓起。如果防止对方服务器过载,防止对方主动屏蔽,。 这是我几年前玩的时候遇到的问题,都没解决得太好。
wibile
2014-11-16 23:41:22 +08:00
听了你的演讲,东西很不错。不过个人觉得还是scrapy更完善,更强大一些。其实一般的爬虫并不难,用正则手写一个也能跑,而scrapy借鉴django的pipeline和middleware更灵活。对于你的web端自学习抓取数据的,我印象中scrapy的开发团队早就做了类似的东西。
还是那句话,一般的爬虫不难,难的是怎么应付现在的各种反扒机制:高阶js,block IP,captcha,cookie session认证。。。
消息队列用啥?rabbitmq?zeromq?没看到啊
binux
2014-11-16 23:44:54 +08:00
数了下
v0.20 比 v0.10 commit多了3.6倍
代码增加了60%
binux
2014-11-16 23:53:53 +08:00
@benjiam 1亿以下链接不需要bloomfliter,任何数据库直接查就够。pyspider 是由脚本控制 follow 什么链接,如何区分带随机数的链接在写脚本的时候就能搞定。

@wibile pyspider 不只是pipeline和middleware这么简单,它是真正的队列,真正异构组件可替换。
框架解决的是共性问题,而反扒利用的恰恰是与别人不同。
比如 block IP,架构上是在fetcher前面加一个squid,给squid加大量的代理。所以你会看到我 API 里面有一个参数是是否使用代理。
比如 douban 反反爬,并不是所有的cookie都需要,这样反而让对方知道你是谁。

消息队列是可替换的啊。。只要实现成内置Queue的接口,用什么都一样。比如 libs/rabbitmq.py
benjiam
2014-11-16 23:57:11 +08:00
不知道这个框架是如何解决的
binux
2014-11-17 00:03:39 +08:00
@benjiam 链接过2亿,请重写 scheduler
带随机数在脚本中自己去掉再提交
js动态可以在 JavaScript 抓取时指定一段js代码,模拟点击动作
防止过载有令牌桶流量控制

反爬请参照上一个回复
phoenixlzx
2014-11-17 00:35:02 +08:00
@binux 不敢当。。有空一起出来玩罢
benjiam
2014-11-17 07:36:45 +08:00
@binux 这是手动版本的。百度或者Google怎么办?几万个网站,一个个写匹配js吗?随机URL也一样

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/147008

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX