gpt4 book ai didi

python - 使用 BeautifulSoup 将 html 文档分成几部分解析 html 注释

转载 作者:行者123 更新时间:2023-12-01 05:50:20 27 4
gpt4 key购买 nike

这是一个非常小的问题,几乎已经解决了 in a previous question .

问题是,现在我有一系列评论,但它并不完全是我所需要的。我收到一系列评论内容。我需要获取中间的 html。

假设我有类似的东西:

<p>some html here<p>
<!-- begin mark -->
<p>Html i'm interested at.</p>
<p>More html i want to pull out of the document.</p>
<!-- end mark -->
<!-- begin mark -->
<p>This will be pulled later, but we will come to it when I get to pull the previous section.</p>
<!-- end mark -->

在回复中,他们指向 Crummy explanation on navigating the html tree ,但我没有找到那里并回答我的问题。

有什么想法吗?谢谢。

PS。如果有人向我指出一种在文档中重复该过程几次的优雅方法,我会感到额外的荣幸,因为我可能会让它工作,但效果很差:D

编辑添加:

根据 Martijn Pieters 提供的信息,我必须将使用上述代码获得的 comments 数组传递给他设计的生成器函数。所以这不会产生错误:

for elem in comments:
htmlcode = allnext(comments)
print htmlcode

我认为现在可以在迭代数组之前操作 htmlcode 内容。

最佳答案

您可以使用.next_sibling指向下一个元素的指针。您可以使用它来查找评论之后的所有内容,最多但不包括其他评论:

from bs4 import Comment

def allnext(comment):
curr = comment
while True:
curr = curr.next_sibling
if isinstance(curr, Comment):
return
yield curr

这是一个生成器函数,您可以使用它来迭代所有“下一个”元素:

for elem in allnext(comment):
print elem

或者您可以使用它来创建所有下一个元素的列表:

elems = list(allnext(comment))

您的示例对于 BeautifulSoup 来说有点太小了,它会将每个评论包装在 <p> 中。标签,但如果我们使用原始目标 www.gamespot.com 中的片段这工作得很好:

<div class="ad_wrap ad_wrap_dart"><div style="text-align:center;"><img alt="Advertisement" src="http://ads.com.com/Ads/common/advertisement.gif" style="display:block;height:10px;width:120px;margin:0 auto;"/></div>
<!-- start of gamespot gpt ad tag -->
<div id="div-gpt-ad-1359295192-lb-top">
<script type="text/javascript">
googletag.display('div-gpt-ad-1359295192-lb-top');
</script>
<noscript>
<a href="http://pubads.g.doubleclick.net/gampad/jump?iu=/6975/row/gamespot.com/home&amp;sz=728x90|970x66|970x150|970x250|960x150&amp;t=pos%3Dtop%26platform%3Ddesktop%26&amp;c=1359295192">
<img src="http://pubads.g.doubleclick.net/gampad/ad?iu=/6975/row/gamespot.com/home&amp;sz=728x90|970x66|970x150|970x250|960x150&amp;t=pos%3Dtop%26platform%3Ddesktop%26&amp;c=1359295192"/>
</a>
</noscript>
</div>
<!-- end of gamespot gpt tag -->
</div>

如果comment是对该片段中第一条评论的引用,allnext()生成器给了我:

>>> list(allnext(comment))
[u'\n', <div id="div-gpt-ad-1359295192-lb-top">
<script type="text/javascript">
googletag.display('div-gpt-ad-1359295192-lb-top');
</script>
<noscript>
<a href="http://pubads.g.doubleclick.net/gampad/jump?iu=/6975/row/gamespot.com/home&amp;sz=728x90|970x66|970x150|970x250|960x150&amp;t=pos%3Dtop%26platform%3Ddesktop%26&amp;c=1359295192">
<img src="http://pubads.g.doubleclick.net/gampad/ad?iu=/6975/row/gamespot.com/home&amp;sz=728x90|970x66|970x150|970x250|960x150&amp;t=pos%3Dtop%26platform%3Ddesktop%26&amp;c=1359295192"/>
</a>
</noscript>
</div>, u'\n']

关于python - 使用 BeautifulSoup 将 html 文档分成几部分解析 html 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14548020/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com