什么是产生scrapy.http.Request背后的逻辑?

时间:2018-06-07 08:46:48

标签: python scrapy

我无法理解的代码来自here

before: x points to 5 and y points indirectly to 5.
after: x points to 7 and y points indirectly to 7.

one of the stackoverflow answers我可以了解 Disassembly of section .init: 0000000000403c30 <_init@@Base>: 403c30: sub $0x8,%rsp 403c34: mov 0x3bb3bd(%rip),%rax # 7beff8 <_fini@@Base+0x26f70c> 403c3b: test %rax,%rax 403c3e: je 403c45 <_init@@Base+0x15> 403c40: callq 404a90 <socket@plt+0x10> 403c45: add $0x8,%rsp 403c49: retq Disassembly of section .plt: 0000000000403c50 <__uflow@plt-0x10>: 403c50: pushq 0x3bb3b2(%rip) # 7bf008 <_fini@@Base+0x26f71c> 403c56: jmpq *0x3bb3b4(%rip) # 7bf010 <_fini@@Base+0x26f724> 403c5c: nopl 0x0(%rax) 0000000000403c60 <__uflow@plt>: 403c60: jmpq *0x3bb3b2(%rip) # 7bf018 <_fini@@Base+0x26f72c> 403c66: pushq $0x0 403c6b: jmpq 403c50 <_init@@Base+0x20> 关键字周围行的基本概念。但上面的代码对我来说太难了,因为它看似嵌套def parse_page1(self, response): item = MyItem() item['main_url'] = response.url request = scrapy.Request("http://www.example.com/some_page.html", callback=self.parse_page2) request.meta['item'] = item yield request def parse_page2(self, response): item = response.meta['item'] item['other_url'] = response.url yield item

你能解释两个yield和回调机制之间的互动吗?具体来说,这些行如何被触发执行?

感谢。

1 个答案:

答案 0 :(得分:0)

yield已得到充分描述here。 实际上,在这种情况下,不需要yield。您可以通过return轻松替换它,并获得相同的结果。这是因为当您需要迭代某些元素的列表时,应该使用yield。例如,要解析页面中的所有链接,您可以执行以下循环:

for link in response.xpath('//a/@href'):
    yeild Request(link, callback=self.parse2) 

并为每个链接调用parse2方法。屈服是关于在scrapy中返回多个请求或项目。这里没有火箭科学。