问题描述
我正在尝试使用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
1楼
您可以使用仅获取文本的文本:
>>> 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>
标记。
2楼
根据 ,要遍历标签的子项,请使用.contents将其作为列表或使用.children(生成器)。
for child in title_tag.children:
print(child)
因此,例如,您要获取每个标签的.text并将其串联在一起。 我不清楚是要链接位置还是只是标签,如果是前者,请参阅此 。