内容提取与Beautiful Soup的帮助

0 投票
1 回答
593 浏览
提问于 2025-04-16 21:33

我正在尝试从一个网站提取数据,数据的格式是这样的:

<div id=storytextp class=storytextp align=center style='padding:10px;'> 
<div id=storytext class=storytext> 
<div class='a2a_kit a2a_default_style' style='float:right;margin-left:10px;border:none;'> 
..... extra stuff
</div>  **Main Content**
</div>
</div>

请注意,MainContent里面可能会有其他标签,但我想要的是整个内容,像一个字符串一样。

所以我做了以下操作:

_divTag = data.find( "div" , id = "storytext" )
innerdiv = _divTag.find( "div" ) # find the first div tag
innerdiv.contents[0].replaceWith("") # replace with null

这样的话,_divTag里就只会有主要内容,但这并没有成功。有人能告诉我我哪里出错了吗?我应该怎么提取主要内容呢?

1 个回答

2

你只需要用 _divTag.contents[2] 就可以了。

你的格式可能让你产生了误解——这段文本并不属于最里面的那个 div 标签(像 innerdiv.textinnerdiv.contentsinnerdiv.findChildren() 会告诉你这一点)。

如果你把原始的 XML 缩进一下,会让事情更清楚:

<div id=storytextp class=storytextp align=center style='padding:10px;'> 
  <div id=storytext class=storytext> 
    <div class='a2a_kit a2a_default_style' style='float:right;margin-left:10px;border:none;'> 
      ..... extra stuff
    </div>  **Main Content**
  </div>
</div>

(顺便说一下,我不太明白你用 innerdiv.contents[0].replaceWith("") 的意图是什么?是想去掉属性吗?还是想去掉换行符?总之,BS 的理念是不去修改解析树,而是简单地忽略你不关心的 99.9% 的内容。BS 的文档可以在 这里 找到。)

撰写回答