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