Xpath如何获取标记中的所有文本

2024-04-28 20:06:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下html代码:

<div id="m0" style="visibility:visible; display:block;">
 <table class="fl">
  <tr bgcolor="white"><td class="v px3"></td>
   <td class="ch">
     <a title="Id: NetViet" class="A3">NetViet</a></td>
   </tr>

<div id="m1" style="visibility:visible; display:block;">
 <table class="fl">
  <td class="ch">
   <A class="A3" title="Id: Kino Polska Muzyka" HREF="http://www.kinopolskamuzyka.pl/" TARGET="_blank">Kino Polska Muzyka</A>
 </tr>
  <td class="ch">
   <i>HBO3 HD</i></td>
 </tr>
  <td class="ch"> Faktura</td>
 </tr>

我的xpath是:tree.xpath('//div[@id="%s"]/table[@class= "fl"]/tr/td[@class="ch"]/a/text()'%div)

但它并没有给我所有的频道。我想得到<td class="ch">中的所有文本,结果是:

[['NetViet'],['Kino Polska Muzyka','HB03','Faktura']]

你知道吗?提前谢谢


Tags: dividstyletablechtrclasstd
2条回答

除了混乱的html结构之外,还要从xpath中删除“tr”和“a”节点,因为不是每个“td”都被这些节点包围

为什么不使用css选择器将td标记元素作为该类的目标呢?对于这种类型的选择,它可能比xpath更快

from bs4 import BeautifulSoup as bs

html = '''
<div id="m0" style="visibility:visible; display:block;">
 <table class="fl">
  <tr bgcolor="white"><td class="v px3"></td>
   <td class="ch">
     <a title="Id: NetViet" class="A3">NetViet</a></td>
   </tr>

<div id="m1" style="visibility:visible; display:block;">
 <table class="fl">
  <td class="ch">
   <A class="A3" title="Id: Kino Polska Muzyka" HREF="http://www.kinopolskamuzyka.pl/" TARGET="_blank">Kino Polska Muzyka</A>
 </tr>
  <td class="ch">
   <i>HBO3 HD</i></td>
 </tr>
  <td class="ch"> Faktura</td>
 </tr>
 '''

soup = bs(html, 'lxml')
items = [item.text.strip() for item in soup.select('td.ch')]
print(items)

相关问题 更多 >