3

Web サイトをスクレイピングしています。この HTML ドキュメントから数値を取得する必要があります。

<td>
<span style=" color: red; font-weight: bold;"> 1.950</span>
</td>
<td> 3.400</td>

1.950 と 3.400 の両方を抽出する必要がありますが、一方の値が a にしかなく、もう一方の値にもスパンがある場合、その方法がわかりません。パスの親と子の両方を取得する一般的な方法はありますか? scrapyでフレームワークを使用していHtmlXPathSelectorます。/td/text()1 つのパスともう 1 つのパスを使用できますが/td/span/text()、1 つのクエリで行う必要があります。これはどのように達成できますか?

4

3 に答える 3

5

を試すことができます:/td//text()の子孫であるすべてのテキスト ノードを選択するにはtd

于 2013-01-12T23:46:43.007 に答える
2

問題を解決するには2つの方法があると思います。

Xpathを使用

次の兄弟::ノード()

もう1つは、すべてのtdsを反復することです(ただし、これは厄介な場合があります)

Xpathの例を挙げます

span_text = hxs.select("/td/span/text()")
next = span_text.select('following-sibling::node()') #you should get 3.400 (or with this idea :P)

このxmlがある場合:

<?xml version="1.0" encoding="UTF-8"?>

<root>
  <td> 
    <span style=" color: red; font-weight: bold;">1.950</span> 
  </td>
  <td>3.400</td>
</root>

そして、次の xpath 式を実行します。

//td/following-sibling::node()

あなたは3.400を得るでしょう

これは xpath をテストするのに適した場所です

于 2013-01-12T23:50:15.003 に答える
1

これを試すことができます

.select("string()").extract()

HTMLタグなしですべてのテキストを抽出します

于 2013-01-14T08:33:32.103 に答える