如何使用div标签作为使用BeautifulSoup搜索html文档的起点

时间:2012-11-16 12:51:56

标签: python beautifulsoup

我有一个HTML文档,我想解析一个具有特定id的表,该表总是在具有特定id的div标签内。这是我尝试过的:

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

显然这不起作用。似乎我的第二个语句返回一个ResultSet而不是让我绕过文档(我认为这是有道理的,但我不知道如何得到我需要的东西!)。进行这种解析的正确方法是什么?

2 个答案:

答案 0 :(得分: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()返回all matching tags列表。你必须遍历结果集,但由于你正在寻找一个单个 div(使用它的id),你最好使用.find(),只返回 one < / em>结果。

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

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

或使用指数:

second_match = soup.find_all('div')[1]

答案 1 :(得分:1)

您还可以使用CSS selectors

target_table = soup.select('div#yourid > table#yourtableid')[0]