如何在Python中提取HTML表格的第二列?

0 投票
3 回答
1966 浏览
提问于 2025-04-18 16:05
<table style="width:300px" border="1">
<tr>
  <td>John</td>
  <td>Doe</td>      
  <td>80</td>
</tr>
<tr>
  <td>ABC</td>
  <td>abcd</td>     
  <td>80</td>
</tr>
<tr>
  <td>EFC</td>
  <td>efc</td>      
  <td>80</td>
</tr>
</table>

我想在Python中获取第二列的所有元素。我对Python还很陌生。

import urllib2
from bs4 import BeautifulSoup

url = "http://ccdsiu.byethost33.com/magento/adamo-13.html"
text = urllib2.urlopen(url).read()
soup = BeautifulSoup(text)
data = soup.findAll('div',attrs={'class':'madhu'})
for div in data:
    trdata = div.findAll('tr')
    tddata = div.findAll('td')
    for trr in trdata:
        print trr

我正在尝试从上面的代码中获取数据。它打印出了表格中的所有元素。我想通过Xpath来实现这个目标。

3 个回答

0

你不需要一个一个去遍历你的 td 元素。可以直接使用这个:

for div in data:
    trdata = div.findAll('tr')
    tddata = div.findAll('td')
    if len(tddata) >= 2:
        print tddata[1]

列表的索引是从0开始的。我会检查 listlength,以确保第二个 td 是存在的。

0

其实你想要的并不太清楚,因为你给的HTML例子并没有什么关系,而你提到的第二列的tds也没有太大帮助。无论如何,我对Elmo的回答做了一些修改,给你提供了重要性标题,然后是每个东西的实际重要性等级。

for div in data:
    trdata = div.findAll('tr')
    tddata = div.findAll('td')
    count = 0
    for i in range(0, len(tddata)):
        if count % 6 == 0:
            print tddata[count + 1]
        count += 1
1

我觉得你不能像你提到的那样用BeautifulSoup来使用xpath。不过,Python自带的lxml模块可以做到这一点。

from lxml import etree

table = '''
<table style="width:300px" border="1">
<tr>
  <td>John</td>
  <td>Doe</td>      
  <td>80</td>
</tr>
<tr>
  <td>ABC</td>
  <td>abcd</td>     
  <td>80</td>
</tr>
<tr>
  <td>EFC</td>
  <td>efc</td>      
  <td>80</td>
</tr>
</table>
'''

parser = etree.HTMLParser()
tree = etree.fromstring(table, parser)
results = tree.xpath('//tr/td[position()=2]')

print 'Column 2\n========'
for r in results:
    print r.text

运行后会打印出

Column 2
========
Doe
abcd
efc

撰写回答