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

Python 如何使用div标记作为使用BeautifulSoup搜索html文档的起点,python,beautifulsoup,Python,Beautifulsoup,我有一个HTML文档,我想解析出一个具有特定id的表,该表始终位于具有特定id的div标记内。以下是我尝试的内容: soup = BeautifulSoup(html) target_div = soup('div', {'id' : 'left'}) target_table = target_div.findNextSibling('table') 显然,这不起作用。我的第二条语句似乎返回了一个ResultSet,而不是在文档中移动我(我认为这是有意义的,但我不确定如何获得我需要的东西!)

我有一个HTML文档,我想解析出一个具有特定id的表,该表始终位于具有特定id的div标记内。以下是我尝试的内容:

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

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

findNextSibling
查找与原始
target\u 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()
返回一个列表。您必须在结果集上循环,但是由于您要查找单个div(使用其id),因此最好使用只返回一个结果的div

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

for element in soup.find_all('div')
    contained_table = element.find('table')
或使用索引:

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

findNextSibling
查找与原始
target\u 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()
返回一个列表。您必须在结果集上循环,但是由于您要查找单个div(使用其id),因此最好使用只返回一个结果的div

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

for element in soup.find_all('div')
    contained_table = element.find('table')
或使用索引:

second_match = soup.find_all('div')[1]
您还可以使用:

您还可以使用:


“一张有特定id的桌子”-我想这是一个打字错误,桌子上没有id?如果不是“一张有特定id的桌子”——我想这是一个打字错误,而桌子上没有id,那就很简单了?否则就没什么大不了的了,我也试过了,得到了“ResultSet没有属性find”@Jim:ah,更正了我的答案;您想使用
find()
still.:-)
.find()
返回第一个元素。调用或使用
.find_all()
返回一系列匹配项(您可以在这些匹配项上循环)。啊,非常好!感谢您的帮助。请注意,
soup.find(“foo”)
相当于
soup.foo
=)不是咳嗽scough@katrielalex:-P仍然时不时地绊倒我。修正和增强!我也试过了,得到了“ResultSet没有属性find”@Jim:ah,更正了我的答案;您想使用
find()
still.:-)
.find()
返回第一个元素。调用或使用
.find_all()
返回一系列匹配项(您可以在这些匹配项上循环)。啊,非常好!感谢您的帮助。请注意,
soup.find(“foo”)
相当于
soup.foo
=)不是咳嗽scough@katrielalex:-P仍然时不时地绊倒我。修正和增强!