2016-10-02 17 views
1

だから、tutorialで治療をしています。私はそこに言及したようにCSSセレクタを使用している場合companion website に各引用のテキスト、作者とタグをこすりしようとしています:Xpathで重複した結果が表示されます。

for quote in response.css('div.quote'): 
    print quote.css('span.text::text').extract() 
    print quote.css('span small::text').extract() 
    print quote.css('div.tags a.tag::text').extract() 

私は望ましい結果(すなわち取得:一度各テキストの印刷、著者および引用符を)。 しかし、一度このようにXPathのセレクターを使用して:私は重複の結果を得る

for quote in response.xpath("//*[@class='quote']"): 
    print quote.xpath("//*[@class='text']/text()").extract() 
    print quote.xpath("//*[@class='author']/text()").extract() 
    print quote.xpath("//*[@class='tag']/text()").extract() 

2.

答えて

4

との間のこのような差は、例えば、あなたの相対的な検索のための.//代わりの//を試しているなぜ私はまだ見つけることができません

print quote.xpath(".//*[@class='text']/text()").extract()

はあなたがquoteから検索しているが、それはその文脈はまだドキュメントのルートですので、絶対的な検索を意味するため、これを取り、//使用した場合。 .//ただし、現在のノード.から検索することを意味し、この検索のコンテキストはquoteの下にネストされた要素に限定されます。

全く同じ結果を得るには、*をCSS検索で使用したタグ(spanまたはdiv)に変更することを検討してください。この場合、それは何の違いもありませんが、将来の参照のためだけに頭が上がっています。

+0

「.//」のことをよく知りませんでした! – Hmd88

0

//を使用すると、応答からすべての結果が得られます。 .//を使用すると、スコープはそのセレクタに制限されます。 //の代わりに.//を試してください。あなたの問題を解決します:-)

関連する問題