2017-11-13 3 views
0

私はscrapyを使用して一連のWebページをクロールしたいと思います。しかし、jsonファイルに値を書き込もうとすると、これらのフィールドは表示されません。Scrapy JSON出力 - 空の値

import scrapy 

class LLPubs (scrapy.Spider): 
    name = "linlinks" 
    start_urls = [ 
     'http://www.linnaeuslink.org/records/record/1', 
     'http://www.linnaeuslink.org/records/record/2', 
    ] 

    def parse(self, response): 
     for container in response.css('div.item'): 
      yield { 
       'text': container.css('div.field.soulsbyNo .value span::text').extract(), 
       'uniformtitle': container.css('div.field.uniformTitle .value span::text').extract(), 
       'title': container.css('div.field.title .value span::text').extract(), 
       'opac': container.css('div.field.localControlNo .value span::text').extract(), 
       'url': container.css('div#digitalLinks li a').extract(), 
       'partner': container.css('div.logoContainer img:first-child').xpath('@src').extract(), 
       } 

そして、私の出力の例:私は愚かと修正が容易な何かをやっている期待しています

{ 
"text": ["Soulsby no. 46(1)"], 
"uniformtitle": ["Systema naturae"], 
"title": ["Caroli Linn\u00e6i ... Systema natur\u00e6\nin quo natur\u00e6 regna tria, secundum classes, ordines, genera, species, systematice proponuntur."], 
"opac": ["002178079"], 
"url": [], 
"partner": [] 
}, 

は、ここに私のコードです!私は、「URL」と「パートナー」のために使用していたパスのどちらも、ここから作業していた。

scrapy shell 'http://www.linnaeuslink.org/records/record/1' 

だから、私はちょうど私が行方不明ですか分かりません。

ああ、今のところ、このコマンドを使用してJSONにエクスポート:あなたの助けのための

scrapy crawl linlinks -o quotes.json 

ありがとう!

答えて

2

問題は、これらのセレクタは、あなたはおそらく、あなただけのurlpartnerキーのresponse.csscontainer.cssを置き換えるシェルに使用されるものを複製するresponse.css('div.item')なく、それらを検証している任意のdiv.item内の「検索可能」ではないということのようです。

+0

それはそれでした!どうもありがとうございます。私はそれをどのようにターゲットにするかを理解しようとしていましたが、より高いレベルのセレクタを使用しなければならないということは意味があります。 – Edgar