Поиск конкретной строки HTML с использованием Python - PullRequest
1 голос
/ 05 апреля 2010

Какими модулями лучше всего написать программу на python, которая просматривает сотни html-документов и удаляет определенную строку html. Например, если у меня есть HTML-документ с <a href="test.html">Test</a>, и я хочу удалить его из каждой HTML-страницы, которая его имеет.

Любая помощь очень ценится, и мне не нужен кто-то, чтобы написать программу для меня, просто полезный пункт в правильном направлении.

Ответы [ 3 ]

5 голосов
/ 05 апреля 2010

Если искомая строка будет в буквальном смысле в HTML, тогда будет удобна простая замена строки:

old_html = open(html_file).read()
new_html = old_html.replace(my_string, "")
if new_html != old_html:
    open(html_file, "w").write(new_html)

В качестве примера того, что строка не находится в HTML буквально, предположим, что вы ищете "Test", как вы сказали. Вы хотите, чтобы он соответствовал этим фрагментам HTML?

<a href='test.html'>Test</a>
<A HREF='test.html'>Test</A>
<a href="test.html" class="external">Test</a>
<a href="test.html">Tes&#116;</a>

и т. Д. «Один и тот же» HTML может быть выражен разными способами. Если вы знаете точные символы, используемые в HTML, тогда простая замена строки вполне подойдет. Если вам нужно сопоставить на уровне семантики HTML, вам нужно будет использовать более продвинутые инструменты, такие как BeautifulSoup, но тогда у вас также будет потенциально очень другой вывод HTML, чем вы начали, даже в разделах, не затронутых удалением , потому что весь файл будет проанализирован и восстановлен.

Чтобы выполнить код для многих файлов, вы найдете os.path.walk полезным для поиска файлов в дереве или glob.glob для сопоставления имен файлов с шаблонами, подобными оболочке.

1 голос
/ 05 апреля 2010
0 голосов
/ 05 апреля 2010

htmllib

Этот модуль определяет класс, который может служить основой для разбора текста. файлы, отформатированные на языке разметки гипертекста (HTML). Класс непосредственно не связан с вводом / выводом - он должен быть обеспечен строковая форма через метод, и вызывает методы «форматера» объект для того, чтобы произвести вывод. Класс HTMLParser предназначен для использоваться в качестве базового класса для других классов, чтобы добавить функциональность и позволяет расширять большинство его методов или переопределены. В свою очередь, этот класс является производным от Класс SGMLParser, определенный в модуле sgmllib. HTMLParser реализация поддерживает язык HTML 2.0, как описано в RFC 1866.

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