【发布时间】:2019-02-19 00:22:38
【问题描述】:
我正在使用 BeautifulSoup4 和 Python 3。
我正在尝试抓取具有以下结构的网页的一部分:
<h1>Main Title Here<br/>
<small>
Subtitle Here -
More Pieces of Subtitle Here</small>
</h1>
到目前为止,我已经尝试过:
- 打印整个元素
print(soup.find('h1').text)的文本 --这打印有多余的空间,使其难以操作。 - 抓取元素的内容 --这似乎产生了 结果与文本相同
因此,使用上面的两种方法,我的输出如下所示:
此处为主标题此处为多个空格 这里有多个空格这里有字幕 - 这里有多个空格这里有多个空格这里有更多字幕
它们都返回带有换行符和大量空格的文本。我尝试了以下方法来清理返回的数据:
- 使用 Replace() 和 Strip()
--这会稍微清理一下,但是, strip 仅删除最外面的空格,而 replace 有可能删除所有空格 (我不想要) - 使用 Decompose() 和 Extract()
--这删除了所有内容 在"small"标签内并返回<none>标签。
我希望输出如下所示:
(第 1 行)此处的主标题
(第 2 行)这里的字幕 - 这里有更多的字幕
或者这也可以:
(1 行) 主标题在这里,副标题在这里 - 更多的副标题在这里
基本上,我需要将其压缩为一两行,没有多余的空格,并剥离所有 html 标签。
根据我在这里其他地方读到的内容,我要么需要使用 for 循环来遍历页面的这一小块(据我所知,这还需要将“Find”更改为“FindAll”,或者,我需要导入 re 模块。
有没有办法在不使用循环或导入模块的情况下达到我想要的结果?
以下是我尝试过的其他一些事情(几乎没有成功):
#Grabbing element, then next element separately
print(soup.findAll('h1')[0].next)
h=(soup.findAll('small')[0].next)
h=h.replace('\n', '')
print(h.strip())
#Grabbing by div and looping through
i = soup.find('div', attrs={'page-header'})
children = i.findChildren()
for child in children:
print(child)
【问题讨论】:
标签: python python-3.x beautifulsoup