假设要爬取 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
另外问下,以上这种情形应该用什么名词。。。
1
qsnow6 2022-01-12 10:26:33 +08:00 1
这就是标准的抓取流程,必须通过 yield 抛出 Request 交给 scrapy 异步来调度,抓取好了会调用 callback 。
如果不走 yield 、callback 这个流程那不就是同步了吗?这样的话会失去这个框架很多的特色。 |
2
qsnow6 2022-01-12 10:29:25 +08:00
scrapy 部分功能支持协程的写法: https://docs.scrapy.org/en/latest/topics/coroutines.html#
|
3
nyxsonsleep OP @qsnow6 非常感谢,其实我是以为会有什么简单的链式的获取的函数。
|