2016-08-02 5 views
-1

このスレッドの返信数を登録しながら、このmailing listのすべてのタイトルを抽出しようとしています。すべてのタイトルが含まれているFirebugの、<ul>ために、XPathによる ScrapはFirebugのリストにある "tbody"と "ul"要素を特定できません

である:

/HTML /本体/テーブル[2]/TBODY/TR 1/TD [2] /テーブル/ TBODY/TR/TD/ulの

私はScrapyシェルでこれを直接貼り付ける場合は、それは空のリストが得られます:Iので、(いくつかの試行錯誤の後

scrapy shell http://seclists.org/fulldisclosure/2002/Jul/index.html 
response.xpath('/html/body/table[2]/tbody/tr[1]/td[2]/table/tbody/tr/td/ul') 
[] 

を与えられたセレクタの直下のサブ要素をリストする方法をドキュメントから理解できませんでした(私にあなたが知っているかどうかを知らせてください)、要素 "tbody"がXpath上で動作しなかったことが分かりました。

almost_email_threads = response.xpath('/html/body/table[2]/tr[1]/td[2]/table/tr/td') 

しかし、私はリーチ「UL」するために、今しようとした場合、それは動作しません:それらを除去することにより、私は/tdまでナビゲートすることができた今

email_threads.xpath('/ul') 
[] 

を、何が私に最も混乱しますその実行は、次のとおりです。

response.xpath('/html/body/table[2]/tr[1]/td[2]/table/tr/td//ul') 

ではなく、ウェブサイト上に表示さと同じ順序で、私のULのを与えるだろう。スレッドをスキップし、異なる順序で実行します。さらに、スレッドごとの返答の数を数えることは不可能に思えます。

私はここで何が欠けていますか?私はScrapyを使ってからしばらくしていましたが、これを理解するのは難しいと思いました。何らかの理由でチュートリアルがBingやGoogleのいずれかを引き出すことはありません。

私はFirebugのを使用したことがない、しかし、あなたが参照するHTMLページを見て、私は次のXPath式はあなたにすべてのトップレベルのスレッド与えることを言うと思います

答えて

-2

:あなたは、各リストの要素から始めて

//li[not(ancestor::li) and ./a/@name] 

を与えられたスレッドへの返答の量を得るために、リストの子の数を数える必要があります。 Scrapyシェルを使用して

、これは、その結果:指定されたセレクタからすべてのサブ要素を一覧表示する方法についてのご質問については

> scrapy shell http://seclists.org/fulldisclosure/2002/Jul/index.html 
In [1]: threads = response.xpath('//li[not(ancestor::li) and ./a/@name]') 
In [2]: for thread in threads: 
    ...:  print thread, len(thread.xpath('descendant::li')) 
<Selector xpath='//li[not(ancestor::li) and ./a/@name]' data=u'<li><a name="0" href="0">Testing</a> <em'> 0 
<Selector xpath='//li[not(ancestor::li) and ./a/@name]' data=u'<li><a name="1" href="1">full disclosure'> 4 
<Selector xpath='//li[not(ancestor::li) and ./a/@name]' data=u'<li><a name="3" href="3">The Death Of TC'> 1 
<Selector xpath='//li[not(ancestor::li) and ./a/@name]' data=u'<li><a name="7" href="7">Re: Announcing '> 24 
[...] 

、あなただけのXPathクエリの実行結果ことを認識する必要がありますセレクタはSelectorListであり、各リスト要素はSelectorインターフェイスを実装しています。したがって、単にXPathを再度使用して、たとえばすべての子供を列挙してください:

In [3]: thread.xpath('child::*') 
Out[3]: 
[<Selector xpath='child::*' data=u'<a name="309" href="309">it\'s all about '>, 
<Selector xpath='child::*' data=u'<em>Florin Andrei (Jul 31)</em>'>, 
<Selector xpath='child::*' data=u'<ul>\n<li><a name="313" href="313">it\'s a'>] 
+0

ありがとうございます。ここではうまくいくようです。 Spacy上のセレクタをリストする方法の答えを知っている人がいるかどうか、他のアドバイスを参考にしたいのですが、私がここであなたの答えを受け入れるかどうかを確認します。私もあなたの答えをupvoted。私の質問とあなたの答えが共に下落した理由を知っていますか?平易な下降の代わりに改善するとコメントしないと改善するのは難しいです。 –

+1

回答の数とセレクタの子を取得する方法を示す答えを更新しました。あなたの質問の下投票に関して、私は推測するしかありません。 MCVの例と少なくとも1つのフォーマットエラーが含まれていると主張されるかもしれない。 http://stackoverflow.com/help/how-to-askを見てみると助かります。しかし、私はそれが説明的なコメントを与えることなしにdownvoteにただ無礼であると思う。 – Markus

+0

親切にありがとう。私はあなたの答えを受け入れた。 –

関連する問題