使脚本更具动态性,实现功能或类

时间:2015-02-04 14:59:32

标签: python python-3.3

目前我的脚本抓了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")]

1 个答案:

答案 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