2012-10-03 9 views
5

のNoneを返します。要するに、ItemPipelineで間違ったインデントは、それがNoneを返すために発生します。Scrapyスパイダーは、私がダウンして以下、答えを見つけた代わりに、項目

私は前のpythonで働いたことはない持つ、ScrapyでCrawlSpiderを書くしようとしてきました。スパイダーは、クロールコールバック関数を呼び出して、データを抽出し、項目を埋め、それは常にNoneを返します。私は印刷物の記事の呼び出しでそれをテストしました、すべてが順調でした。私は歩留まりとリターンの両方でこれを試しましたが(まだ違いは分かりませんが)。率直に言って、私はアイデアがありません。ダウン以下のコールバックfunction.//editも同様

class ZeitSpider(CrawlSpider): 
name= xxxx 
allowed_domains = ['example.com'] 
start_urls = ['http://www.example.com/%d/%d' %(JAHR,39)] 
rules = (Rule(SgmlLinkExtractor(restrict_xpaths=('//ul[@class="teaserlist"]/li[@class="archiveteaser"]/h4[@class="title"]')),callback='parse_url',follow=True),) 

def parse_url(self,response): 

    def parse_url(self,response): 
    hxs = HtmlXPathSelector(response) 

    article = Article() 

    article['url']= response.url.encode('UTF-8',errors='strict') 

    article['author']= hxs.select('//div[@id="informatives"]/ul[@class="tools"]/li[@class="author first"]/text()').extract().pop().encode('UTF-8',errors='strict') 
    article['title']= hxs.select('//div[@class="articleheader"]/h1/span[@class="title"]/text()').extract().pop().encode('UTF-8',errors='strict') 

    article['text']= hxs.select('//div[@id="main"]/p/text()').extract().pop().encode('UTF-8',errors='strict') 

    article['excerpt'] = hxs.select('//p[@class="excerpt"]/text()').extract().pop().encode('UTF-8',errors='strict') 
    yield article 

アイテム定義をスパイダーコードを追加している

class Article(Item): 
    url=Field() 
    author=Field() 
    text=Field() 
    title=Field() 
    excerpt=Field() 

答えて

2

[OK]を、私は、エラーが見つかりましたPDBとプログラムをステップ後:

を私は複数のクモを持っているので

は、私は複数のItemPipelinesを書きたかったです。スパイダーごとに区別するため、

if spider.name=='SpiderName' 
    return item 

インデントに注意してください。パイプラインがNothingを返したため、出力はNoneになりました。

インデントを変更した後、クモは完璧に動作しました。 PEBCACの別の例。

+0

ありがとうございます。 '' NoneType ''オブジェクトには属性 'iterkeys'がありませんでした。おそらく、Googleがここにリダイレクトするのを助けるかもしれない。 – KrisWebDev

関連する問題