我在运行Python 2.7.8的MacOSX上使用BeautifulSoup4。我很难从以下html代码中提取信息

 <tbody tabindex="0" class="yui-dt-data" id="yui_3_5_0_1_1408418470185_1650">
      <tr id="yui-rec0" class="yui-dt-first yui-dt-even">
           <td headers="yui-dt0-th-rank" class="rank yui-dt0-col-rank"></td>
           </tr>
      <tr id="yui-rec1" class="yui-dt-odd">...</tr>
      <tr id="yui-rec2" class="yui-dt-even">...</tr>
 </tbody>


我似乎无法抓住表格或其任何内容,因为BS和/或python似乎无法识别带有连字符的值。所以通常的代码,像

 Table = soup.find('tbody',{'class':'yui-dt-data'})


要么

 Row2 = Table.find('tr',{'id':'yui-rec2'})


只会返回一个空对象(不是NONE,只是空的)。我对BS4或Python并不陌生,我以前是从此站点提取信息的,但是现在的类名已经不同于以前的名称。现在,一切都有连字符。有什么方法可以让Python识别连字符或解决方法?

我需要使我的代码具有通用性,这样我就可以跨多个具有相同类名的页面运行它。不幸的是,id中的<tbody>属性对于该特定表而言是唯一的,因此我无法使用该属性在整个网页中识别该表。

任何帮助,将不胜感激。提前致谢。

最佳答案

如下代码:

from bs4 import BeautifulSoup

htmlstring = """ <tbody tabindex="0" class="yui-dt-data" id="yui_3_5_0_1_1408418470185_1650">
      <tr id="yui-rec0" class="yui-dt-first yui-dt-even">
      <tr id="yui-rec1" class="yui-dt-odd">
      <tr id="yui-rec2" class="yui-dt-even">"""


soup = BeautifulSoup(htmlstring)
Table = soup.find('tbody', attrs={'class': 'yui-dt-data'})
print("Table:\n")
print(Table)
tr = Table.find('tr', attrs={'class': 'yui-dt-odd'})
print("tr:\n")
print(tr)


输出:

Table:

<tbody class="yui-dt-data" id="yui_3_5_0_1_1408418470185_1650" tabindex="0">
<tr class="yui-dt-first yui-dt-even" id="yui-rec0">
<tr class="yui-dt-odd" id="yui-rec1">
<tr class="yui-dt-even" id="yui-rec2"></tr></tr></tr></tbody>
tr:

<tr class="yui-dt-odd" id="yui-rec1">
<tr class="yui-dt-even" id="yui-rec2"></tr></tr>


即使您提供的html本身不是有效的,似乎BS仍在猜测应该如何,因为soup.prettify()会产生

<tbody class="yui-dt-data" id="yui_3_5_0_1_1408418470185_1650" tabindex="0">
 <tr class="yui-dt-first yui-dt-even" id="yui-rec0">
  <tr class="yui-dt-odd" id="yui-rec1">
   <tr class="yui-dt-even" id="yui-rec2">
   </tr>
  </tr>
 </tr>
</tbody>


尽管我猜想这些tr不应嵌套。

您可以尝试运行确切的代码并查看输出是什么吗?

关于python - Beautifulsoup无法找到名称中带有连字符的类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25375351/

10-11 23:10
查看更多