0

我有一个 HTML 文档,我想解析一个具有特定 id 的表,该表始终位于具有特定 id 的 div 标记中。这是我尝试过的:

soup = BeautifulSoup(html)
target_div = soup('div', {'id' : 'left'})
target_table = target_div.findNextSibling('table')

显然那是行不通的。似乎我的第二条语句返回了一个 ResultSet 而不是在文档中移动我(我认为这是有道理的,但我不确定如何获得我需要的东西!)。进行这种解析的正确方法是什么?

4

2 回答 2

2

findNextSibling查找包含在与原始元素相同的父元素中的表target_div。您想查找包含在div 中的表。用于.find()

target_div = soup.find('div', {'id' : 'left'})
target_table = target_div.find('table')

对于简单的情况(例如包含的表),您可以使用标记名作为属性:

target_div = soup.find('div', {'id' : 'left'})
target_table = target_div.table

您正在调用一个标签,这就像使用.find_all()method.find_all()返回所有匹配的标签,一个列表。您必须遍历结果集,但由于您正在寻找一个div(使用它的 id),所以最好使用.find()它只返回一个结果。

如果您确实需要处理多个匹配项,只需将结果.find_all()视为列表;循环它:

for element in soup.find_all('div')
    contained_table = element.find('table')

或使用索引:

second_match = soup.find_all('div')[1]
于 2012-11-16T12:54:15.270 回答
1

您还可以使用CSS 选择器

target_table = soup.select('div#yourid > table#yourtableid')[0]
于 2012-11-16T12:56:18.840 回答