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