2016-07-04 14 views
2

私はscrapシェルを使用する代わりに、メインスクリプトでスクラップしたアイテムのリストを取得したいと考えています。スクラップを使用してメインスクリプトからスクラップしたアイテムを取得する方法は?

parseというメソッドがあり、クラスFooSpiderに定義されています。このメソッドはItemのリストを返します。 Scrapyフレームワークはこのメソッドを呼び出します。しかし、私はこの返されたリストを自分でどのように入手できますか?

私はそれについて多くの記事を見つけましたが、私は彼らが何を言っているのか分かりません。コンテキストとして

は、私がここで私は main.pyまたは run.pyのような主要なPythonスクリプトから resultを返します可能性がどのように

import scrapy 

from tutorial.items import DmozItem 

class DmozSpider(scrapy.Spider): 
    name = "dmoz" 
    allowed_domains = ["dmoz.org"] 
    start_urls = [ 
     "http://www.dmoz.org/Computers/Programming/Languages/Python/", 
    ] 

    def parse(self, response): 
     for href in response.css("ul.directory.dir-col > li > a::attr('href')"): 
      url = response.urljoin(href.extract()) 
      yield scrapy.Request(url, callback=self.parse_dir_contents) 

    def parse_dir_contents(self, response): 
     result = [] 
     for sel in response.xpath('//ul/li'): 
      item = DmozItem() 
      item['title'] = sel.xpath('a/text()').extract() 
      item['link'] = sel.xpath('a/@href').extract() 
      item['desc'] = sel.xpath('text()').extract() 
      result.append(item) 

     return result 

公式のコード例を置きますか?

if __name__ == "__main__": 
    ... 
    result = xxxx() 
    for item in result: 
     print item 

誰もが、私はこれがどこからかlistを返しますするコードスニペットを提供してもらえますか?

ありがとうございました!

+1

このアイテムのリストにはどのような理由でアクセスしたいのですか。ありがとう! – alecxe

+0

スパイダーを 'scrap run dmoz -o items.json'で実行すると、すべてのアイテムを削り取り、' items.json'というファイルにjson形式で保存し、後で 'json .loads(data) ' –

+0

@GustavoCarvalhoこれは、クローラの処理速度を落とし、ファイルロックと同期の問題があります。私はすべての作業をスクリプトで行うことができますか? – KyL

答えて

0

/process/transformで作業するか、アイテムを格納する場合は、Item Pipelineを調べて、通常の掃除クロールでそのトリックを行います。

関連する問題