Поиск всех * визуализированных * изображений в файле HTML - PullRequest
0 голосов
/ 07 апреля 2009

Мне нужен способ найти только визуализированные теги IMG во фрагменте HTML. Таким образом, я не могу просто пересмотреть фрагмент HTML, чтобы найти все теги IMG, потому что я бы также получил теги IMG, которые отображаются как текст в HTML (не отображается).

Я использую Python в AppEngine.

Есть идеи?

Спасибо, Иван

Ответы [ 4 ]

2 голосов
/ 07 апреля 2009

Звучит как работа для 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 выяснит, что должно быть показано, если все они сбежали. Вы можете уточнить?

2 голосов
/ 07 апреля 2009

Использование BeautifulSoup . Это анализатор HTML / XML для Python, предоставляющий простые идиоматические способы навигации, поиска и изменения дерева разбора. Вероятно, это не будет ошибкой поддельных тегов img.

2 голосов
/ 07 апреля 2009

Исходный код для визуализированного тега img выглядит примерно так:

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

Если тег img отображается как текст (не отображается), HTML-код будет выглядеть следующим образом:

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

&lt; это символ "<", <code>&gt; это символ ">"

Чтобы соответствовать только отображаемому тегу img, вы можете использовать регулярное выражение для соответствия тегу img, сформированному <и>, а не &lt; и &gt;

Теги Img в комментариях также необходимо игнорировать, вставляя символы между "<!--" и "-->"

0 голосов
/ 07 апреля 2009

Поскольку теги изображений могут находиться между некоторыми тегами

или , вам, вероятно, придется пройти через dom (= преобразовать html в дерево xml / dom и найти его) и найти все 
imageузлы. В стандартной библиотеке python есть класс xml.dom: docs.python.org

Вы также можете сделать это на клиенте и сообщить об этом через ajax (это будет означать большую нагрузку на сервер).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...