当前位置:  开发笔记 > 编程语言 > 正文

美丽的汤,并通过ID提取div及其内容

如何解决《美丽的汤,并通过ID提取div及其内容》经验,为你挑选了7个好方法。

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

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

在内部找到s
也可以:

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

或者更简单[`div = soup.find(id ="articlebody")`](http://stackoverflow.com/a/22410466/4279) (12认同)

好吧,那么回答你的问题是不可能的,水晶球不是一种可靠的调试方式.:) (8认同)

或``soup.find('div',id ='articlebody')` (4认同)

我的示例文档非常庞大.我正在追查这个问题 - 我认为这对div的div不起作用.我计算了文件中有多少div与print len(汤('div'))导致10,我可以清楚地看到超过10个div与firebug.所以我认为它只是找不到div内的div,所以我需要通过包装器缩小包装. (2认同)


jfs.. 62

要通过它找到一个元素id:

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


Josh Crozier.. 14

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")


小智.. 11

我认为'div'标签嵌套太多时会出现问题.我试图从facebook html文件解析一些联系人,而Beautifulsoup无法找到带有"fcontent"类的标签"div".

其他类也会发生这种情况.当我一般搜索div时,它只会转换那些没有嵌套的div.

html源代码可以是来自朋友列表的朋友列表(不是你的朋友)的任何页面.如果有人可以测试它并给出一些建议我会非常感激.

这是我的代码,我只是尝试使用类"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)


liang.. 9

很可能是因为默认的beautifulsoup解析器有问题.更改不同的解析器,如'lxml',然后重试.



1> Lukáš Lalins..:

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

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

在内部找到s
也可以:

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


或者更简单[`div = soup.find(id ="articlebody")`](http://stackoverflow.com/a/22410466/4279)
好吧,那么回答你的问题是不可能的,水晶球不是一种可靠的调试方式.:)
或``soup.find('div',id ='articlebody')`
我的示例文档非常庞大.我正在追查这个问题 - 我认为这对div的div不起作用.我计算了文件中有多少div与print len(汤('div'))导致10,我可以清楚地看到超过10个div与firebug.所以我认为它只是找不到div内的div,所以我需要通过包装器缩小包装.

2> jfs..:

要通过它找到一个元素id:

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



3> Josh Crozier..:

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")



4> 小智..:

我认为'div'标签嵌套太多时会出现问题.我试图从facebook html文件解析一些联系人,而Beautifulsoup无法找到带有"fcontent"类的标签"div".

其他类也会发生这种情况.当我一般搜索div时,它只会转换那些没有嵌套的div.

html源代码可以是来自朋友列表的朋友列表(不是你的朋友)的任何页面.如果有人可以测试它并给出一些建议我会非常感激.

这是我的代码,我只是尝试使用类"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)



5> liang..:

很可能是因为默认的beautifulsoup解析器有问题.更改不同的解析器,如'lxml',然后重试.



6> dagoof..:

在beautifulsoup源代码中,这一行允许div嵌套在div中; 所以你对卢卡斯评论的关注是无效的.

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

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

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



7> 小智..:

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

听起来很疯狂,但如果你从野外刮痧,你不能排除多个div ...

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有