2015-02-04 3 views
0

현재 내 스크립트는 1 개의 데이터를 긁어냅니다. 이제 20 개 이상의 URL을 긁어서 코드를 동적으로 만들려고합니다. 어떻게하면 좋은 해결책을 찾을 수 없습니까? "items/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) 


더 동적 코드, 더 나은 솔루션?

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")] 

을 또는 직접 사용 :

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

그냥 항목을 반환

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를 보라.