最近我一直在进行一个抓取项目。我有点陌生,但是几乎可以做所有事情,但是我遇到了一个小问题。我捕获了新闻文章的每一行都这样做:
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文本”。我能做什么?谢谢
答案 0 :(得分:0)
使用.get_text(split=' ')
代替.text
,您会得到带有空格"Header2 Paragraph text"
的文本
您还可以使用其他字符-即。 “ |” -.get_text(split='|')
,您将得到"Header2|Paragraph text"
。
然后您可以使用split("|")
获取列表["Header2", "Paragraph text"]
并保留最后一个元素。
您还可以找到h2
和clear()
或extract()
这个标签,以后您可以从所有div
获取文本,而无需获取"Header2"
>