有没有干净的方法使用BeautifulSoup获取HTML表格的第n列?

5 投票
1 回答
1511 浏览
提问于 2025-04-16 15:00

假设我们在一个页面上查看第一个表格,

table = BeautifulSoup(...).table

我们可以用一个简单的循环来逐行扫描这个表格:

for row in table:
    f(row)

但是如果想要提取某一列的数据,就会变得有些麻烦。

我的问题是:有没有什么简单的方法可以提取某一列的数据?可以通过列的位置,或者通过列的“名称”(也就是这列第一行显示的文字)来提取。

1 个回答

5

lxml 的速度比 BeautifulSoup 快很多,所以你可能会想用它。

from lxml.html import parse
doc = parse('http://python.org').getroot()
for row in doc.cssselect('table > tr'):
    for cell in row.cssselect('td:nth-child(3)'):
         print cell.text_content()

或者,不用循环:

rows = [ row for row in doc.cssselect('table > tr') ]
cells = [ cell.text_content() for cell in rows.cssselect('td:nth-child(3)') ]
print cells

撰写回答