也许yield
在Python中是对某些人的补救措施,但对我而言不是……至少目前还没有。我了解yield
创建了一个“发电机”。
[当我决定学习刮y时偶然发现yield
。我为Spider编写了一些代码,其工作方式如下:
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的良率是可补救的,但对我而言却不是……至少现在还没有。我知道收益会产生一个“发电机”。当我决定学习刮板时,我偶然发现了产量。我为...
我将检查What does the "yield" keyword do?,以更好地说明yield
的工作原理。