在HTML文件中查找所有*渲染的*图像

时间:2009-04-07 13:40:42

标签: python html regex parsing

我需要一种在HTML代码段中仅查找呈现的 IMG标记的方法。因此,我不能只使用HTML代码段来查找所有IMG标记,因为我还会获得在HTML中显示为文本的IMG标记(未呈现)。

我在AppEngine上使用Python。

有什么想法吗?

谢谢, 伊万

4 个答案:

答案 0 :(得分:2)

渲染的img标签的源代码是这样的:

<img src="img.jpg"></img>

如果img标签显示为文本(未呈现),则html代码将如下所示:

 &lt;img src=&quot;styles/BWLogo.jpg&quot;&gt;&lt;/img&gt;

&lt;是“&lt;”字符&gt;是“&gt;”字符

要仅匹配渲染的img标记,可以使用正则表达式匹配由&lt;形成的img标记。和&gt;,而不是&lt;&gt;

在“<!--”和“-->”之间隐藏字符时,还需要忽略评论中的Img标记

答案 1 :(得分:2)

使用BeautifulSoup。它是Python的HTML / XML解析器,提供了导航,搜索和修改解析树的简单惯用方法。它可能不会被伪造的img标签弄错。

答案 2 :(得分:2)

听起来像是BeautifulSoup的工作:

>>> from BeautifulSoup import BeautifulSoup
>>> doc = """
... <html>
... <body>
... <img src="test.jpg">
... &lt;img src="yay.jpg"&gt;
... <!-- <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将其报告回来(这意味着服务器上的负载会更多)。