我正在使用BeautifulSoup4和Python 3。
我正在尝试抓取具有以下结构的网页的一部分:
<h1>Main Title Here<br/>
<small>
Subtitle Here -
More Pieces of Subtitle Here</small>
</h1>
到目前为止,我已经尝试过:
print(soup.find('h1').text)
的文本
-打印出来的多余空间使操作变得困难。 因此,使用以上两种方法,我的输出看起来都像这样:
此处的主标题此处的多个空格 此处有多个空格此处是- 这里有多个空格这里有多个空格
这两个都返回带有换行符和很多空格的文本。我已经尝试了以下方法来清理返回的数据:
"small"
标签中并返回<none>
标签。我希望输出看起来像这样:
(第1行)此处的主标题
(第2行)此处的字幕-这里有更多的字幕
或者这也可以工作:
(1行)主要标题在这里,字幕在这里-更多字幕在这里
基本上,我需要将其压缩为一两行,且没有多余的空格,并且所有html标签都被剥离。
根据我在其他地方阅读的内容,我要么需要使用for循环来迭代页面的这一小部分(就我所知,这还需要将“查找”更改为“查找全部”,或者,我需要导入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)
答案 0 :(得分:0)
我建议您依靠标题中的标签,而不是换行符:
h1 = soup.find('h1')
list(h1.strings)[0] # The first string of the header
#'Main Title Here'
h1.find('small').string.strip() # The string in <small>
#'Subtitle Here - \nMore Pieces of Subtitle Here'