当前位置: 代码迷 >> python >> Python:解析div下的所有元素
  详细解决方案

Python:解析div下的所有元素

热度:131   发布时间:2023-06-19 09:34:02.0

我正在尝试使用beautifulsoup解析div下的所有元素,问题是在解析之前我不知道div下的所有元素。 例如,一个div可以具有段落模式和项目符号格式的文本数据以及一些href元素。 我打开的每个网址在我正在查看的特定div类下可以具有不同的元素:

例:

网址a可以具有以下内容:

<div class='content'>
<p> Hello I have a link </p>

<li> I have a bullet point

<a href="foo.com">foo</a>
</div>

但是网址b

可以有

<div class='content'>
<p> I only have paragraph </p>

</div>

我开始做这样的事情:

content = souping_page.body.find('div', attrs={'class': 'content})

但是如何超越这一点却很少造成混淆。 我希望从所有解析数据中创建一个字符串作为最终结果。

最后,我希望从每个示例中获取以下字符串:

示例1:最终输出

 parse_data = Hello I have a link I have a bullet point 
 parse_links = foo.com

示例2:最终输出

 parse_data = I only have paragraph  

您可以使用仅获取文本的文本:

>>> from bs4 import BeautifulSoup
>>> sample1 = BeautifulSoup('''\
... <div class='content'>
... <p> Hello I have a link </p>
... 
... <li> I have a bullet point
... 
... <a href="foo.com">foo</a>
... </div>
... ''').find('div')
>>> sample2 = BeautifulSoup('''\
... <div class='content'>
... <p> I only have paragraph </p>
... 
... </div>
... ''').find('div')
>>> sample1.get_text()
u'\n Hello I have a link \n I have a bullet point\n\nfoo\n'
>>> sample2.get_text()
u'\n I only have paragraph \n'

或者您可以使用其剥离一些:

>>> ' '.join(sample1.stripped_strings)
u'Hello I have a link I have a bullet point foo'
>>> ' '.join(sample2.stripped_strings)
u'I only have paragraph'

要获得所有环节,寻找所有的a与元素href属性并以列表收集这些:

>>> [a['href'] for a in sample1.find_all('a', href=True)]
['foo.com']
>>> [a['href'] for a in sample2.find_all('a', href=True)]
[]

href=True参数将搜索限制为定义了href属性的<a>标记。

根据 ,要遍历标签的子项,请使用.contents将其作为列表或使用.children(生成器)。

for child in title_tag.children:
    print(child)

因此,例如,您要获取每个标签的.text并将其串联在一起。 我不清楚是要链接位置还是只是标签,如果是前者,请参阅此 。