scrapy 爬取数据的问题

2022-01-12 09:58:53 +08:00
 nyxsonsleep

假设要爬取 a 、b 、c url 的页面。但是 b 页面的 url 是从 a url 中获取的,类似的 c 中 b 来。 那么是不是只能通过 yield Requests 嵌套回调函数的形式来解决? 还是有更好的方法呢?

类似如下:

class spider:
	def start_requests:
    	yield Requests(url=a)
        
    def parse:
    	......
        yield Requests(url=b,...,callback=func_b )
        
    def func_b:
    	...
        yield Requests(url=c,...,callback=func_c )
        
    def func_c:
    	...
        return item   

另外问下,以上这种情形应该用什么名词。。。

1909 次点击
所在节点    Python
3 条回复
qsnow6
2022-01-12 10:26:33 +08:00
这就是标准的抓取流程,必须通过 yield 抛出 Request 交给 scrapy 异步来调度,抓取好了会调用 callback 。
如果不走 yield 、callback 这个流程那不就是同步了吗?这样的话会失去这个框架很多的特色。
qsnow6
2022-01-12 10:29:25 +08:00
scrapy 部分功能支持协程的写法: https://docs.scrapy.org/en/latest/topics/coroutines.html#
nyxsonsleep
2022-01-15 14:50:13 +08:00
@qsnow6 非常感谢,其实我是以为会有什么简单的链式的获取的函数。

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

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

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

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

© 2021 V2EX