我无法理解的代码来自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
和回调机制之间的互动吗?具体来说,这些行如何被触发执行?
感谢。
答案 0 :(得分:0)
yield
已得到充分描述here。
实际上,在这种情况下,不需要yield
。您可以通过return
轻松替换它,并获得相同的结果。这是因为当您需要迭代某些元素的列表时,应该使用yield
。例如,要解析页面中的所有链接,您可以执行以下循环:
for link in response.xpath('//a/@href'):
yeild Request(link, callback=self.parse2)
并为每个链接调用parse2
方法。屈服是关于在scrapy中返回多个请求或项目。这里没有火箭科学。