4

私はこのhtmlコードを持っています:

<table>
 <tr>
  <td class="test"><b><a href="">aaa</a></b></td>
  <td class="test">bbb</td>
  <td class="test">ccc</td>
  <td class="test"><small>ddd</small></td>
 </tr>
 <tr>
  <td class="test"><b><a href="">eee</a></b></td>
  <td class="test">fff</td>
  <td class="test">ggg</td>
  <td class="test"><small>hhh</small></td>
 </tr>
</table>

この Python コードを使用して<td class="test">、lxml モジュールですべてを抽出します。

import urllib2
import lxml.html

code   = urllib.urlopen("http://www.example.com/page.html").read()
html   = lxml.html.fromstring(code)
result = html.xpath('//td[@class="test"][position() = 1 or position() = 4]')

それはうまくいきます!結果は次のとおりです。

<td class="test"><b><a href="">aaa</a></b></td>
<td class="test"><small>ddd</small></td>


<td class="test"><b><a href="">eee</a></b></td>
<td class="test"><small>hhh</small></td>

(つまり、それぞれの最初と 4 番目の列<tr>) 今、抽出する必要があります。

aaa (リンクのタイトル)

ddd<small> (タグ間のテキスト)

eee (リンクのタイトル)

hhh<small> (タグ間のテキスト)

これらの値を抽出するにはどうすればよいですか?

(問題は、<b>タグを削除して最初の列のアンカーのタイトルを取得し、4 番目の列のタグを削除する必要があることです<small>)

ありがとうございました!

4

2 に答える 2

8

その場合el.text_content()、各要素からすべてのタグを削除します。つまり、次のようになります。

result = [el.text_content() for el in result]
于 2010-05-11T02:13:07.050 に答える
4

各ステップで必要なものを取得してみませんか?

links = [el.text for el in html.xpath('//td[@class="test"][position() = 1]/b/a')]
smalls = [el.text for el in html.xpath('//td[@class="test"][position() = 4]/small')]
print zip(links, smalls) 
# => [('aaa', 'ddd'), ('eee', 'hhh')]
于 2010-05-11T01:20:10.807 に答える