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

时间:2019-02-26 14:16:14

标签: python html xml xpath web-scraping

我有这个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']]

有什么主意吗?预先感谢。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

为什么不使用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)