我如何从python中的'yield'获得结果?

问题描述 投票:1回答:1

也许yield在Python中是对某些人的补救措施,但对我而言不是……至少目前还没有。我了解yield创建了一个“发电机”。

[当我决定学习刮y时偶然发现yield。我为Spider编写了一些代码,其工作方式如下:

  1. 开始超级链接并提取所有超级链接-这不是完整的超级链接,只是子目录串联到开始的超级链接上
  2. 检查超链接将满足特定条件的超链接附加到基本超链接
  3. 使用请求导航到新的超链接并进行解析以使用'onclick'在元素中查找唯一的ID
import scrapy

class newSpider(scrapy.Spider)
    name = 'new'
    allowed_domains = ['www.alloweddomain.com']
    start_urls = ['https://www.alloweddomain.com']

    def parse(self, response)
        links = response.xpath('//a/@href').extract()
        for link in links:
            if link == 'SpecificCriteria':
                next_link = response.urljoin(link)
                yield Request(new_link, callback=self.parse_new)

    def parse_new(self, response)
        trs = response.xpath("//*[@class='unit-directory-row']").getall()
        for tr in trs:
            if 'SpecificText' in tr:
                elements = tr.split()
                for element in elements:
                    if 'onclick' in element:
                        subelement = element.split('(')[1]
                        uid = subelement.split(')')[0]
                        print(uid)
                        yield {
                            'uid': uid
                        }
                break

它可以正常工作,scrapy爬行第一页,创建新的超链接并导航到下一页。 new_parser解析uid的HTML并“屈服”它。 scrapy的引擎显示正确的uid已“屈服”。

我不明白我如何才能使用parse_new获得的uid来创建和导航到新的超链接,就像我要一个变量一样,而且我似乎无法使用Request返回变量。 >

也许对某些人来说,Python的良率是可补救的,但对我而言却不是……至少现在还没有。我知道收益会产生一个“发电机”。当我决定学习刮板时,我偶然发现了产量。我为...

python scrapy yield
1个回答
0
投票

我将检查What does the "yield" keyword do?,以更好地说明yield的工作原理。

© www.soinside.com 2019 - 2024. All rights reserved.