1
bitwing 2014-11-16 21:24:02 +08:00
今天总算看到干货了
|
2
phoenixlzx 2014-11-16 21:29:07 +08:00
给点一个大大的赞
pycon 没见到真可惜... |
3
Rabbit52 2014-11-16 21:33:58 +08:00
牛逼,点赞!
|
4
binux OP @phoenixlzx 给你单独讲一个?
|
5
owlsec 2014-11-16 22:21:04 +08:00 via iPhone
赞(≧▽≦)
|
6
Rico 2014-11-16 22:31:10 +08:00
赞,正好最近需要.
|
7
zxy 2014-11-16 22:32:48 +08:00 via iPhone
赞一个,我特别关注的人😃
|
8
pc10201 2014-11-16 22:34:59 +08:00
好像比scrapy强大很多,能给个对比评测就好了~
|
9
qianlifeng 2014-11-16 22:42:14 +08:00
看起来很强大,已STAR
|
10
binux OP @pc10201 主要是很多功能我现在还没闹不明白 scrapy 要怎么实现,如果我出评测的话别人一定说“那是你不会用”。。
而且设计思路上,pyspider 已经是一个架构了,scrapy 是一个包。 就我对 scrapy 的理解 * pyspider 使用 JSON ,不需要预先定义 Item * 使用真的消息队列,而不需要 Pipeline * 有真正的链接库,而不是 set集合,能对链接进行重抓调度,抓取更新更灵活方便 * 面向数据包协议编程,而不是面向接口。当需求不满足的时候,甚至可以用其他语言替换某些模块 |
11
regmach 2014-11-16 23:14:39 +08:00
已收藏
已感谢 |
12
reverland 2014-11-16 23:17:43 +08:00
|
13
benjiam 2014-11-16 23:41:15 +08:00 via iPad
爬虫的几个难点, 链接保存如何,快速检索出已经下载过的链接,bloomfliter太简单了,不用habse这种又貌似没有扩张性,如何区分现在很多带随机数的链接。javascrip生成的页面,js动态跳转,,由ajax和后端交互生成的页面抓起。如果防止对方服务器过载,防止对方主动屏蔽,。 这是我几年前玩的时候遇到的问题,都没解决得太好。
|
14
wibile 2014-11-16 23:41:22 +08:00
听了你的演讲,东西很不错。不过个人觉得还是scrapy更完善,更强大一些。其实一般的爬虫并不难,用正则手写一个也能跑,而scrapy借鉴django的pipeline和middleware更灵活。对于你的web端自学习抓取数据的,我印象中scrapy的开发团队早就做了类似的东西。
还是那句话,一般的爬虫不难,难的是怎么应付现在的各种反扒机制:高阶js,block IP,captcha,cookie session认证。。。 消息队列用啥?rabbitmq?zeromq?没看到啊 |
15
binux OP 数了下
v0.20 比 v0.10 commit多了3.6倍 代码增加了60% |
16
binux OP @benjiam 1亿以下链接不需要bloomfliter,任何数据库直接查就够。pyspider 是由脚本控制 follow 什么链接,如何区分带随机数的链接在写脚本的时候就能搞定。
@wibile pyspider 不只是pipeline和middleware这么简单,它是真正的队列,真正异构组件可替换。 框架解决的是共性问题,而反扒利用的恰恰是与别人不同。 比如 block IP,架构上是在fetcher前面加一个squid,给squid加大量的代理。所以你会看到我 API 里面有一个参数是是否使用代理。 比如 douban 反反爬,并不是所有的cookie都需要,这样反而让对方知道你是谁。 消息队列是可替换的啊。。只要实现成内置Queue的接口,用什么都一样。比如 libs/rabbitmq.py |
17
benjiam 2014-11-16 23:57:11 +08:00 via iPad
不知道这个框架是如何解决的
|
18
binux OP @benjiam 链接过2亿,请重写 scheduler
带随机数在脚本中自己去掉再提交 js动态可以在 JavaScript 抓取时指定一段js代码,模拟点击动作 防止过载有令牌桶流量控制 反爬请参照上一个回复 |
19
phoenixlzx 2014-11-17 00:35:02 +08:00 via Android 1
@binux 不敢当。。有空一起出来玩罢
|
20
benjiam 2014-11-17 07:36:45 +08:00 via Android
@binux 这是手动版本的。百度或者Google怎么办?几万个网站,一个个写匹配js吗?随机URL也一样
|
21
kslr 2014-11-17 08:42:33 +08:00
里面好多我想要的东西,开始拆 T_T
|
22
forever139 2014-11-17 09:05:55 +08:00
@binux 第一次分享出来的时候,就拉到本地测试过,环境啥的都好了,就是页面没反应,然后搞了几个月的scrapy,这次再试试。
|
23
binux OP |
24
Jaycee 2014-11-17 09:37:53 +08:00
赞。。。
|
25
xujialiang 2014-11-17 09:42:49 +08:00
不得不说!!!好东西啊!!!!!!!
|
26
zyx89513 2014-11-17 09:51:17 +08:00
我用过 Portia, 请问和Portia比有哪些不同呢?
|
27
laike9m 2014-11-17 09:56:50 +08:00
其实你该申请主题演讲的。。
|
28
s12348765 2014-11-17 09:58:08 +08:00
收藏下。。。
|
29
sohoer 2014-11-17 10:22:10 +08:00
看到爬虫我就来劲!呵呵!不错
|
30
binux OP @zyx89513
没用过 Portia,看介绍,感觉不是一层的东西,Portia 更像一个规则配置器,下层还是跑的 scrapy。 规则上,还是 http://blog.binux.me/2014/07/how-to-extract-data-from-web/ 里面,“xpath / css选择器 / 正则表达式” 这一层的东西,只是用表单简化配置罢了。 pyspider 虽然也有 自动生成css选择器的辅助工具,但是为了灵活性,或者说,还没有做这一层。 |
31
yakczh 2014-11-17 11:38:15 +08:00
-r requirements.txt
这里面内容是啥? |
35
glongzh 2014-11-17 11:48:36 +08:00
上HN了,赞一下!
|
36
yakczh 2014-11-17 11:51:56 +08:00
http://localhost:5000/debug 这是python的在线编辑器? 通过后台 修改python代码,这个怎么调试呢?
|
38
shoumu 2014-11-17 12:39:06 +08:00
能不能更多地分享一些那两个抽取demo的内容
|
41
wusuopuBUPT 2014-11-17 13:32:43 +08:00
@phoenixlzx 好啊-_-
|
42
wusuopuBUPT 2014-11-17 13:33:43 +08:00
牛!
|
43
hustlzp 2014-11-17 13:39:01 +08:00
碉堡了!
|
44
withrock 2014-11-17 14:53:48 +08:00
我觉得更牛逼的是你博客里写的那个“如何从 WEB 页面中提取信息”
http://blog.binux.me/2014/07/how-to-extract-data-from-web/ micro-data |
45
Yiph 2014-11-17 14:54:16 +08:00
MARK
|
47
staticor 2014-11-17 15:17:56 +08:00
mark/ 对比着scrapy学习学习。。。
|
48
geew 2014-11-17 15:40:17 +08:00
已收藏 好东西 不过这star数也是醉了
可能是我看的原因... |
49
Mrabbit 2014-11-17 16:31:27 +08:00
谢谢分享,已star
|
50
zhchyu999 2014-11-17 16:35:09 +08:00
好东西
|
51
oaix 2014-11-17 17:09:19 +08:00
上HN首页了,恭喜恭喜
|
52
yanchao7511461 2014-11-17 19:37:52 +08:00
好东西啊 好东西
|
55
qloog 2014-11-17 22:30:51 +08:00
看起来很牛掰的东西~
|
56
binux OP HN 上有人提出要测性能。。于是。。
多线程下 5700 pages/min,作为对比 scrapy bench 4800 pages/min 多进程都不想欺负它了。。 PS:我用了无限制消息队列,流量直接往下一个模块上压。。由于不清楚 scrapy 的实现其实结果不好说。。 https://gist.github.com/binux/67b276c51e988f8e2c31 |
57
crossmaya 2014-11-20 14:18:24 +08:00
windows上跑不起来,我只是过来说一声。。
|
60
crossmaya 2014-11-20 14:43:13 +08:00
看了一下,可能pycurl模块的问题!
|
61
idy0013 2014-11-20 16:33:46 +08:00
做一个爬虫社区 大家可以贡献代码,可以获取爬到的数据 有偿获取数据给贡献者
|
63
fly51fly 2014-11-23 07:07:11 +08:00
原来是同校小友!有机会多交流交流……要是pyspider的文档再完善一点就好了,尤其是自定义配置这块;Mac上试了一下,run.py后5000能访问,不过debug的任务测试run不动,看调试信息报“Uncaught TypeError: Cannot read property 'indexOf' of undefined”,runtest也有错(太长避免撑爆版面先不贴了),还没顾上仔细看
|
65
benjiam 2014-11-23 22:19:19 +08:00
@binux 我的意思 网站上的url 你认为1亿以下可以存数据库。这样是可以的,但是这样任何url是否已经存在需要靠一次db io.这样的效率很低,如果存在内存用map,这样的结构。内存消耗又非常大。bloomfliter 又有可能丢失某些url. hbase 貌似是google 的解决方案,但是没实践过
|
66
binux OP @benjiam 我觉得没有必要,pyspider是人工写模板的,而不是说页面上所有的链接都需要去检测一次是否在库中。实际上只有列表页有这样的检测。
再加上需要做按照时间判断是否重抓取的检测,bloomfilter 是不够的,还是得查库。 |
67
fly51fly 2014-11-24 06:38:25 +08:00
我的环境:Mac OS X 10.9.5 下 Python 2.7.5
|
68
aksoft 2014-12-05 14:40:37 +08:00
真高级啊...
|
71
gogobeijing 2015-02-02 19:34:52 +08:00
mac下 Python 2.7.5,执行setup.py报错,如下:
Searching for six>=1.8.0 Reading http://pypi.python.org/simple/six/ Download error: [Errno 60] Operation timed out -- Some packages may not be found! Couldn't find index page for 'six' (maybe misspelled?) Scanning index of all packages (this may take a while) Reading http://pypi.python.org/simple/ Download error: [Errno 60] Operation timed out -- Some packages may not be found! No local packages or download links found for six>=1.8.0 error: Could not find suitable distribution for Requirement.parse('six>=1.8.0') |
72
binux OP @gogobeijing 能自己读一下报错吗
|
73
gogobeijing 2015-02-02 21:05:26 +08:00
缺 six-1.8.0 ,我在 http://pypi.python.org/simple/six/ 上找到 six-1.8.0.tar.gz ,可以自己下载吗?
执行自动安装就是一直说timed out呢。 |
74
laotaitai 2015-03-29 21:58:11 +08:00
我觉得这pyspider至少在开发测试时用pyspider, 是坨屎. 另外, 文档写得也像坨屎. 我认为Scrapy比你设计更加先进和更加人性化, 你这pyspider连windows版的火车头的1%都不如. 我自己也尝试设计过爬虫框架, 一开始也是觉得scrapy是坨屎, 后面越来越觉得scrapy设计非常先进.
|
76
laoyuan 2015-04-03 14:45:51 +08:00
快被我自己写的山寨PHP爬虫搞疯了,pypy快给我爬起~
|
77
laoyuan 2015-04-03 14:56:50 +08:00
呃,还要先去学学Python。。
|
78
monsabre 2015-04-24 15:16:43 +08:00
低逼格的百毒找楼主这样的脑残写出锁死浏览器毒一坨屎
很正常 |
80
monsabre 2015-04-24 19:05:29 +08:00
|
83
laoyuan 2015-04-27 15:34:14 +08:00
LZ啊,对于那种列表性质的页面,一次crawl() 得到多条result 的情况,只能override on_result() 么?有没有方便一点的办法入库多条result 呢?
|
84
laoyuan 2015-04-28 12:38:50 +08:00
太好了,在Tutorial Level 1 里碰到的问题今天看Level 2 就解决了
|
85
laoyuan 2015-04-28 16:22:20 +08:00
http://demo.pyspider.org/debug/tutorial_twitch
parse_rendered_page() 报 error: error |
86
laoyuan 2015-04-29 15:41:43 +08:00
原来一次crawl() 得到多条result 用message 来解决,今天正式学完文档了。学习笔记我发了个帖子算是反馈吧:/t/187256
|
88
694380889 2015-04-30 15:00:52 +08:00
这个可以爬到哪些东西 谁能具体说下 只能爬到可以看见的东西吗
|
90
WeiEast 2015-08-15 22:00:19 +08:00
用js 去click() 提交表单不起作用。是不是不支持js点击事件。我的代码 http://demo.pyspider.org/debug/agoda
|
91
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 不知道问题是否说明白了,还望帮忙看一下,谢谢。 |
92
binux OP @yuwei162 debug 时是由 WEBUI 执行的脚本,而正式执行时,是由 processor 执行的脚本,他们可能不在同一台机器上.
|
93
yuwei162 2015-09-12 16:37:38 +08:00
@binux 是啊!一语道破天机,谢谢。
对了,我最近一直都在迷惑: 第一:如果不通过 ui ,是否可以直接运行脚本提交任务? 第二:如果部署多个 processor 的话,如果我像上面执行一个任务的话,是不能提前预选 processor 吧。 感觉我提的两个问题是一个,还请帮忙解答下,谢谢。 |
94
binux OP @yuwei162
1 、什么意思?你这里的任务是 task 还是 project ?现在只能通过模拟 http 请求,或者直接插数据库(记得通知 scheduler 更新),才能通过脚本进行。 2 、不能,本来就是分布式设计,如果要执行 processor ,需要脚本获取 processor 的部署信息。 |
96
Muse666 2019-04-15 11:07:48 +08:00
楼主 怎么利用 pyspider 对同一个网页实现每隔 15min 抓取一次数据啊 求翻牌 万很感谢
|