使用Beautiful Soup根据ID提取div及其内容

215 投票
13 回答
540541 浏览
提问于 2025-04-15 18:27
soup.find("tagName", { "id" : "articlebody" })

为什么这个代码没有返回 <div id="articlebody"> ... </div> 标签和其中的内容?它什么都没返回。我知道这个标签是存在的,因为我正好在看着它。

soup.prettify()

soup.find("div", { "id" : "articlebody" }) 也不管用。

(编辑:我发现 BeautifulSoup 没有正确解析我的页面,这可能意味着我试图解析的页面在 SGML 或其他格式上没有正确格式化)

13 个回答

49

Beautiful Soup 4 支持大部分的 CSS 选择器,你可以通过 .select() 方法 来使用它们。因此,你可以使用像 id 选择器 这样的方式来选择元素,例如:

soup.select('#articlebody')

如果你需要指定元素的类型,可以在 id 选择器前面加上一个 类型选择器

soup.select('div#articlebody')

.select() 方法会返回一组元素,这意味着它的结果和下面的 .find_all() 方法 是一样的:

soup.find_all('div', id="articlebody")
# or
soup.find_all(id="articlebody")

如果你只想选择一个单独的元素,那么你可以直接使用 .find() 方法

soup.find('div', id="articlebody")
# or
soup.find(id="articlebody")
127

要通过元素的 id 来找到它:

div = soup.find(id="articlebody")
300

你应该把你的示例文档发出来,因为这段代码运行得很好:

>>> import BeautifulSoup
>>> soup = BeautifulSoup.BeautifulSoup('<html><body><div id="articlebody"> ... </div></body></html')
>>> soup.find("div", {"id": "articlebody"})
<div id="articlebody"> ... </div>

在一个

里面找到另一个
也没问题:

>>> soup = BeautifulSoup.BeautifulSoup('<html><body><div><div id="articlebody"> ... </div></div></body></html')
>>> soup.find("div", {"id": "articlebody"})
<div id="articlebody"> ... </div>

撰写回答