美丽的汤,提取一个div和其内容的ID

soup.find("tagName", { "id" : "articlebody" }) 

为什么这不返回<div id="articlebody"> ... </div>标签和之间的东西? 它什么都不返回。 而且我知道这个事实存在,因为我正在盯着它

 soup.prettify() 

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

编辑:这个post没有答案 – 我如何删除它? 我发现BeautifulSoup不能正确parsing,这可能实际上意味着我试图parsing的页面没有正确格式化在SGML或任何。

您应该发布您的示例文档,因为代码工作正常:

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

<div>find<div> s也是可行的:

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

通过它的idfind一个元素:

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

我认为当'div'标签嵌套过多时会出现问题。 我试图从facebook的html文件parsing一些联系人,而Beautifulsoup无法find类“fcontent”的标签“div”。

其他类也会发生这种情况。 当我一般searchdiv时,只会转换那些嵌套不那么多的div。

html源代码可以是你朋友的朋友列表的facebook的任何页面(不是你的朋友之一)。 如果有人可以testing它,并给出一些build议,我会非常感激。

这是我的代码,我只是试图打印类“fcontent”的标签“div”的数量:

 from BeautifulSoup import BeautifulSoup f = open('/Users/myUserName/Desktop/contacts.html') soup = BeautifulSoup(f) list = soup.findAll('div', attrs={'class':'fcontent'}) print len(list) 

最有可能是因为默认的beautifulsoupparsing器有问题。 更改不同的parsing器,如“lxml”,然后重试。

在美丽的源代码中,这行允许divs嵌套在div中; 所以你对鲁卡斯的评论的担忧是无效的。

 NESTABLE_BLOCK_TAGS = ['blockquote', 'div', 'fieldset', 'ins', 'del'] 

我想你需要做的是指定你想要的attrs,如

 source.find('div', attrs={'id':'articlebody'}) 

在试图刮谷歌的时候也碰到了我。
我结束了使用pyquery。
安装:

 pip install pyquery 

使用:

 from pyquery import PyQuery pq = PyQuery('<html><body><div id="articlebody"> ... </div></body></html') tag = pq('div#articlebody') 

你尝试过soup.findAll("div", {"id": "articlebody"})

听起来很疯狂,但如果你是从野外抢东西,你不能排除多个div …

我用了:

 soup.findAll('tag', attrs={'attrname':"attrvalue"}) 

作为我find / findall的语法; 也就是说,除非在标签和属性列表之间还有其他的可选参数,否则这应该是不一样的。

这是一个代码片段

 soup = BeautifulSoup(:"index.html") titleList = soup.findAll('title') divList = soup.findAll('div', attrs={ "class" : "article story"}) 

正如你所看到的,我发现所有的标签,然后我发现里面有class =“article”的所有标签

美丽的汤4使用.select()方法支持大多数CSSselect器 ,因此您可以使用一个idselect器,例如:

 soup.select('#articlebody') 

如果您需要指定元素的types,可以在idselect器之前添加一个typesselect器:

 soup.select('div#articlebody') 

.select()方法将返回一组元素,这意味着它将返回与以下.find_all()方法示例相同的结果:

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

如果你只想select一个元素,那么你可以使用.find()方法 :

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