2016-11-16 2 views
0

アンカータグがあり、後に1つまたは2つのスパンタグが続きます。私は特定のノードの2つの兄弟と共に抽出するためのxpath式が必要です(存在する場合)

  1. で見つかったテキストと同等比較に基づいて、すべての3個のタグ(achor、スパン1兄弟、および兄弟スパン2)
  2. (1兄弟アンカー、)二つのタグをアンカーのhrefを選択する必要があります
  3. は、アンカータグ

にいつでも上記のいずれかのテキストがタグの上記配列のいずれかで見つかった場合、スパン1及び兄弟スパン2兄弟、アンカーの特定の構成のために真となり、Iアンカータグのhrefが後で処理されるようにします。

例:私はそれかどうかを確認します、私は「いくつかのテキストABC DEFを」アンカー、スパンのこのような構成からすべてのテキストを取得し、すなわちスパンしたい、次のHTMLは、今

<table class="table table-striped" width="95%"> 
    <tbody> 
     <tr> 
     <td ><span class="badge">P</span> 
    <a href="/abc" title="Title of anchor">some text</a> 
    (
    <span style="font-weight:600;color:#666">ABC</span> 
    <span style="font-weight:600;color:#666">DEF</span> 
    ) 
     </td> 
     </tr> 
    </table> 

スニペットを検討私の文字列がABC DEF(テキスト内にあるはずの完全な文字列)になっていて、文字列がテキスト内にあるので、アンカーのhrefを取得する時間があります。

答えて

1

xpathが非常に複雑になり、プログラムを遅くする可能性があるので、個別にチェックすることをお勧めします。

もう一つのヒントは、ちょうどあなたが(文書全体がenought大きい場合、これは多くの役立つだろう)、必要な情報が入っていることがわかっている部分だけでセレクタを作成するには、次のようになります。

from scrapy import Selector 
... 
sel = Selector(text=response.css('table.table').extract_first()) 
anchor_selector = sel.css('a') 
anchor_text = anchor_selector.css('::text').extract_first() 
span_siblings = anchor_selector.xpath('./following-sibling::span/text()').extract() 
# now play with anchor_text and the list of span_siblings 
+0

ナイスアイデアを!ありがとうeLRuLL :) – KMH

関連する問題