求助 Scrapy 的问题

2016-04-14 09:45:18 +08:00
 guolingbing
我在 parse 方法里面想要请求一个 json 数据该怎么写?
用这样写出来的
r = Request(link)的返回对象是 Request ,惊!
又不想绕过 Scrapy 框架用 url,requests 库来请求。

难道 scrapy 里面不能在 parse 里面请求另一个数据?
3039 次点击
所在节点    Python
11 条回复
leavic
2016-04-14 09:57:02 +08:00
下面是我抓 javbus 时,通过 request 抓磁链部分的 ajax 请求的做法:
===============
https://gist.github.com/lifetyper/8c7858345f7d788a0bd76a2af470b46d
==============
简单来说,建立一个 scrapy 的 request ,设置好 callback ,通过 request.meta['item']=item 的方法把已经抓到内容的 item 传递给 callback ,然后在 callback 里继续处理要额外 request 的内容,并填充数据到 item 。
最后 yield 给 pipeline 。
guolingbing
2016-04-14 10:03:37 +08:00
@leavic 嗯嗯,谢谢~因为我要提取的是推荐链接,所以我又写了个 parse 方法直接把推荐链接处理完了,总感觉这点 scrapy 有点绕圈子~
Yc1992
2016-04-14 10:39:12 +08:00
yield 一个 request , 设置不同的回调 parse
guolingbing
2016-04-14 11:08:06 +08:00
@Yc1992 嗯嗯,最后虽然这样解决了,但还是觉得有逻辑上的撕裂感
Yc1992
2016-04-14 11:29:34 +08:00
@guolingbing 一般都这样写啊,写多了就适应了,我一开始写爬虫 parse 也长的可怕,后来就拆分了。
Zhongwei
2016-04-14 12:33:34 +08:00
就是不断地 yield, 传给下个 callback 继续处理。
fengxiang
2016-04-14 13:24:30 +08:00
搭车,有没有方法立刻暂停?等了一天都停不下来。
Yc1992
2016-04-14 13:38:54 +08:00
@fengxiang ctrl + c 只按一次可以停止并返回当前爬取的结果
fengxiang
2016-04-14 14:51:59 +08:00
@Yc1992 我用+c 不能马上停下来,有时候要等好几个小时。囧 rz
Yc1992
2016-04-14 14:58:06 +08:00
@fengxiang 说明 schedule 里面的 request 太多了, 使用 Debugging memory leaks with trackref 看一下,或者设置下爬取页面上限, scrapy 有接口
guolingbing
2016-04-14 14:59:07 +08:00
@fengxiang 按一次 ctrl+c 是 gracefully stop,再按一次就是强行停止

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

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

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

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

© 2021 V2EX