目前我的脚本抓了1个url数据,现在我想抓20个网址所以现在我想让我的代码更加动态,无法找到一个很好的解决方案,如何处理和传递“项目的值/ nordfront_items“到一个函数。也许更好的解决方案是使用子类?不幸的是我不知道:)
非常感谢您帮助找到有效的动态解决方案。
旧代码,无功能
import urllib.request
import lxml.etree as ET
from pipeline import NordfrontPipeline
opener = urllib.request.build_opener()
tree = ET.parse(opener.open('https://nordfront.se/feed'))
items = [{'title': item.find('title').text, 'link': item.find('link').text, 'pubdate': item.find('pubDate').text} for item in tree.xpath("/rss/channel/item")]
pipeline = NordfrontPipeline()
for item in items:
pipeline.process_item(item, None)
更多动态代码,更好的解决方案?
import urllib.request
import lxml.etree as ET
from pipeline import NordfrontPipeline
nordfront_url = "http://doesntmatter.com/feed"
nordfront_pipe = NordfrontPipeline()
nordfront_items = ?
nordfront_exec = spider(nordfront_url, nordfront_pipe, nordfront_items)
def spider(url, pipe, items)
opener = urllib.request.build_opener()
tree = ET.parse(opener.open(url))
# items = [{'title': item.find('title').text, 'link': item.find('link').text, 'pubdate': item.find('pubDate').text} for item in tree.xpath("/rss/channel/item")]
答案 0 :(得分:0)
只需退回物品:
def spider(url):
opener = urllib.request.build_opener()
tree = ET.parse(opener.open(url))
return [{'title': item.find('title').text, 'link': item.find('link').text, 'pubdate': item.find('pubDate').text} for item in tree.xpath("/rss/channel/item")]
或直接使用它们:
def spider(url, pipe):
opener = urllib.request.build_opener()
tree = ET.parse(opener.open(url))
for item in tree.xpath("/rss/channel/item"):
pipe.process_item({'title': item.find('title').text, 'link': item.find('link').text, 'pubdate': item.find('pubDate').text}, None)
如果您想将所有项目放在一个列表中,请查看list.extend
。