我需要一种在HTML代码段中仅查找呈现的 IMG标记的方法。因此,我不能只使用HTML代码段来查找所有IMG标记,因为我还会获得在HTML中显示为文本的IMG标记(未呈现)。
我在AppEngine上使用Python。
有什么想法吗?
谢谢, 伊万
答案 0 :(得分:2)
渲染的img标签的源代码是这样的:
<img src="img.jpg"></img>
如果img标签显示为文本(未呈现),则html代码将如下所示:
<img src="styles/BWLogo.jpg"></img>
<
是“&lt;”字符>
是“&gt;”字符
要仅匹配渲染的img标记,可以使用正则表达式匹配由&lt;形成的img标记。和&gt;,而不是<
和>
在“<!--
”和“-->
”之间隐藏字符时,还需要忽略评论中的Img标记
答案 1 :(得分:2)
使用BeautifulSoup。它是Python的HTML / XML解析器,提供了导航,搜索和修改解析树的简单惯用方法。它可能不会被伪造的img标签弄错。
答案 2 :(得分:2)
听起来像是BeautifulSoup的工作:
>>> from BeautifulSoup import BeautifulSoup
>>> doc = """
... <html>
... <body>
... <img src="test.jpg">
... <img src="yay.jpg">
... <!-- <img src="ohnoes.jpg"> -->
... <img src="hurrah.jpg">
... </body>
... </html>
... """
>>> soup = BeautifulSoup(doc)
>>> soup.findAll('img')
[<img src="test.jpg" />, <img src="hurrah.jpg" />]
正如您所看到的,BeautifulSoup非常聪明,可以忽略评论并显示HTML。
编辑:我不确定你的RSS源转义所有图片是什么意思。我不希望BeautifulSoup弄清楚如果它们都被转义的话会显示哪些。你能说清楚吗?
答案 3 :(得分:0)
由于图像标签可能位于某些&lt; pre&gt;之间。或&lt; xmp&gt;标记你可能需要遍历dom(=将html转换为xml / dom树并搜索它)并找到所有&lt; img&gt;节点。 python标准库中有一个xml.dom类:docs.python.org
您也可以在客户端上执行此操作并通过ajax将其报告回来(这意味着服务器上的负载会更多)。