2017-02-26 9 views
-1

私はちょうどタイトルの中にある問題を記述するのは難しいので、あまりにも曖昧であることをお詫び申し上げます。私はHackerNewsの記事のタイトルを拝見していますが、JSONファイルに結果を書き込むときに問題があります。それ以外のすべてのエントリは空の "タイトル"オブジェクトです。私の出力のサンプル:あなたが見ることができるようにScrapyを使用しているときに空のJSONエントリを取得する

{"title": []}, 
{"title": ["Buffett Assails Money-Manager Fees as Berkshire Reports Profit Rise"]}, 
{"title": []}, 
{"title": ["Linus on Git and SHA-1"]}, 
{"title": []}, 
{"title": ["Machine Learning from scratch: Bare bones implementations in Python"]}, 
{"title": []}, 
{"title": ["The Future of Not Working"]}, 
{"title": []}, 
... 

、私は正常にリンクのタイトルを取得するんだけど、他のすべての一つは、空のようです。なぜこれが起こっているのか少し混乱しています。これを行うためのコードは非常にシンプルです(しかし、私はScrapyも新しくなっているので、おそらく何か不足しています)。ここに私のコードです:

def parse(self,response): 
    for title in response.css('td.title'): 
     yield { 
      'title' : title.css('a.storylink::text').extract(), 
     } 

おかげさまで助けを!

答えて

-1

私はCSSエントリで間違いを犯したようです。私はHNが同じ名前を持ついくつかの他のクラスを持っているように見えます

for title in response.css('tr.athing'): 

代わりの

for title in response.css('td.title'): 

に入っている必要があります。

0

XPathセレクタが間違っていると正しく診断しました。 HackerNewsは、2つのTDを持つTRエンティティのタイトルを持ちます。最初はランクです。 TRごとに2番目のものが必要です。

tr.athingは、選択範囲を広げているため、おそらく大幅に改善されませんので、後でさらに洗練される必要があります。

XPathを追加してみてください。 :nth-child(2)セレクタを使用するか、Pythonループを変更して、奇妙なTDをすべて無視することができます。

(スクレイプ後に空のアイテムを除外することもできます)。

関連する問題