我从Dmoz网站获得的内容。我制作的for loop
,我不想每次都重复。取而代之的是,我想一种不重复每个功能的方式。我创建了许多功能。我分享了一个,只是向您展示zip
绑定了名称和查找器的值。而且我不希望在每个函数中都重复for loop
。
def parse_about(self, response):
# do your stuff on second page
items = response.meta['items']
names = {'name1': 'Headings',
'name2': 'Paragraphs',
'name3': '3 Projects',
'name4': 'About Dmoz',
'name5': 'Languages',
'name6': 'You can make a differnce',
'name7': 'Further Information'
}
finder = {'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'
}
for name, find in zip(names.values(), finder.values()):
items[name] = response.css(find).extract()
yield items
答案 0 :(得分:1)
假设当前代码按预期工作,而其他功能仅因names
和finder
字典的内容不同,则可以使用如下函数提取循环:
def find_items(response, names, finder):
items = response.meta['items']
for name, find in zip(names.values(), finder.values()):
items[name] = response.css(find).extract()
yield items
然后,如果您使用的是Python 3.3或更高版本,则可以在调用函数中使用yield from
语句,如下所示:
yield from find_items(reponse, names1, finder1)