我还创建了其他页面,但向您展示了一个页面。我专门为循环做了另一个功能,但没有给我结果。它给了我错误。 find_items
函数放在哪里?还是还有其他问题?
这是错误:
yield from find_items(response, names1, finder1)
NameError: name 'find_items' is not defined
代码如下:
# save and call request to another page
dct = [(self.about_page, self.parse_about)]
for page, callback in dct:
yield response.follow(page, callback, meta={'items': items})
def find_items(response, names1, finder1):
items = response.meta['items']
for name, find in zip(names1.values(), names1.values()):
items[name] = response.css(find).extract()
yield items
def parse_about(self, response):
# do your stuff on second page
# items = response.meta['items']
names1 = {'name1': 'Headings',
'name2': 'Paragraphs',
'name3': '3 Projects',
'name4': 'About Dmoz',
'name5': 'Languages',
'name6': 'You can make a differnce',
'name7': 'Further Information'
}
finder1 = {'find1': 'h2::text , #mainContent h1::text',
'find2': 'p::text',
'find3': 'li~ li+ li b a::text , li:nth-child(1) b a::text',
'find4': '.nav ul a::text , li:nth-child(2) b a::text',
'find5': '.nav~ .nav a::text',
'find6': 'dd::text , #about-contribute::text',
'find7': 'li::text , #about-more-info a::text'
}
yield from find_items(response, names1, finder1)
答案 0 :(得分:0)
在这种情况下,find_items
应该在您的课程的外面。
如果要在类中使用它,请检查缩进并将self
添加到参数:
def find_items(self, response, names1, finder1):
items = response.meta['items']
for name, find in zip(names1.values(), names1.values()):
items[name] = response.css(find).extract()
yield items
在parse_about
中也不要忘记添加self.
:
yield from self.find_items(response, names1, finder1)
除此之外,请检查您的Python版本。用法yield from
仅出现在3.x版本上。对于2.x版本,您应该使用:
for item in self.find_items(response, names1, finder1):
yield item