美丽的汤,提取一个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>
通过它的id
find一个元素:
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器 ,因此您可以使用一个id
select器,例如:
soup.select('#articlebody')
如果您需要指定元素的types,可以在id
select器之前添加一个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")