从BeautifulSoup行提取标签文本

时间:2019-04-15 22:48:05

标签: python web-scraping beautifulsoup

最近我一直在进行一个抓取项目。我有点陌生,但是几乎可以做所有事情,但是我遇到了一个小问题。我捕获了新闻文章的每一行都这样做:

lines=bs.find('div',{'class':'Text'}).find_all('div')

但是由于某些原因,有些行包含一个h2标签和一个br标签,例如:

 <div><div><h2>Header2</h2></div><div><br/></div><div>Paragraph text

因此,如果我在该代码段上运行.text,则会得到“ Header2Paragraph文本”。我已经在另一行中存储了“ Header2”文本,因此我想删除第二个幻影。

我设法隔离了这些行:

for n,t in enumerate(lines):
    if t.find('h2') is not None and t.find('br') is not None:
        print('\n',n,':',t)

但是我不知道如何删除与h2标记关联的文本,因此这些行变成了“段落文本”而不​​是“ Header2Paragraph文本”。我能做什么?谢谢

1 个答案:

答案 0 :(得分:0)

使用.get_text(split=' ')代替.text,您会得到带有空格"Header2 Paragraph text"的文本

您还可以使用其他字符-即。 “ |” -.get_text(split='|'),您将得到"Header2|Paragraph text"

然后您可以使用split("|")获取列表["Header2", "Paragraph text"]并保留最后一个元素。


您还可以找到h2clear()extract()这个标签,以后您可以从所有div获取文本,而无需获取"Header2"


文档:get_text()clear()extract()