再次分享 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

40820 次点击
所在节点    分享创造
96 条回复
laotaitai
2015-04-25 00:07:00 +08:00
@monsabre 哎, 兄弟, 咱们可以骂他代码烂, 不能进行人身攻击哈, 毕竟我们用它爬虫又没给钱呢.
Livid
2015-04-25 06:24:58 +08:00
@binux 多谢举报。那个账号已经被 Deactivate。一些无意义的回复会被清理。
laoyuan
2015-04-27 15:34:14 +08:00
LZ啊,对于那种列表性质的页面,一次crawl() 得到多条result 的情况,只能override on_result() 么?有没有方便一点的办法入库多条result 呢?
laoyuan
2015-04-28 12:38:50 +08:00
太好了,在Tutorial Level 1 里碰到的问题今天看Level 2 就解决了
laoyuan
2015-04-28 16:22:20 +08:00
http://demo.pyspider.org/debug/tutorial_twitch
parse_rendered_page() 报 error: error
laoyuan
2015-04-29 15:41:43 +08:00
原来一次crawl() 得到多条result 用message 来解决,今天正式学完文档了。学习笔记我发了个帖子算是反馈吧:/t/187256
laoyuan
2015-04-29 15:43:20 +08:00
@Livid 上一楼全角冒号后面没解析出来 /t/187256
694380889
2015-04-30 15:00:52 +08:00
这个可以爬到哪些东西 谁能具体说下 只能爬到可以看见的东西吗
binux
2015-04-30 15:07:47 +08:00
@694380889 确实只能爬到可以「看见」的东西,这个「看见」是 http 层的「看见」。
WeiEast
2015-08-15 22:00:19 +08:00
用js 去click() 提交表单不起作用。是不是不支持js点击事件。我的代码 http://demo.pyspider.org/debug/agoda
yuwei162
2015-09-10 20:40:09 +08:00
@binux 你好,最近使用 pyspider ,碰到一个问题:
debug 模式下存在的文件,在 running 的时候提示文件不存在。
代码示例如下:
file = "/home/pyspider/myseeds"
file2 = "/home/pyspider/next"

@every (minutes=24 * 60 )
def on_start (self ):
print os.getcwd ()
print os.path.dirname (self.file )
print "file: exist=%s" % os.path.exists (self.file.strip ())
print os.path.abspath (self.file )

#open (self.file2, 'w') #通过该模式写文件,在 runing 中可以被识别出来
print "file2: exist=%s" % os.path.exists (self.file2 )
print os.path.abspath (self.file2 )
debug 模式下输出为:
/home/pyspider
/home/pyspider
file: exist=True
/home//pyspider/myseeds
file2: exist=True
/home/pyspider/next
running 的时候输出为:
/home/pyspider
/home/pyspider
file: exist=False
/home/pyspider/myseeds
file2: exist=True
/home/pyspider/next
不知道问题是否说明白了,还望帮忙看一下,谢谢。
binux
2015-09-10 20:42:44 +08:00
@yuwei162 debug 时是由 WEBUI 执行的脚本,而正式执行时,是由 processor 执行的脚本,他们可能不在同一台机器上.
yuwei162
2015-09-12 16:37:38 +08:00
@binux 是啊!一语道破天机,谢谢。
对了,我最近一直都在迷惑:
第一:如果不通过 ui ,是否可以直接运行脚本提交任务?
第二:如果部署多个 processor 的话,如果我像上面执行一个任务的话,是不能提前预选 processor 吧。
感觉我提的两个问题是一个,还请帮忙解答下,谢谢。
binux
2015-09-12 17:27:07 +08:00
@yuwei162
1 、什么意思?你这里的任务是 task 还是 project ?现在只能通过模拟 http 请求,或者直接插数据库(记得通知 scheduler 更新),才能通过脚本进行。
2 、不能,本来就是分布式设计,如果要执行 processor ,需要脚本获取 processor 的部署信息。
explist
2016-04-29 23:31:38 +08:00
@binux 网易云音乐怎么抓取?
Muse666
2019-04-15 11:07:48 +08:00
楼主 怎么利用 pyspider 对同一个网页实现每隔 15min 抓取一次数据啊 求翻牌 万很感谢

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

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

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

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

© 2021 V2EX