使用Beautiful Soup根据ID提取div及其内容
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>