Внутри HTML, библиотека переназначения URL в python - PullRequest
2 голосов
/ 21 января 2012

Под переназначением URL я подразумеваю изменение всех "href" и "src" и "action" и ... внутри фактического документа HTML.

Существуют ли какие-либо библиотеки Python для такого переопределения URL?

В приложении веб-сервера python (основанном на торнадо) я хочу иметь возможность изменять HTML-код, который я использую, на основе некоторых условий.

Представьте, что я прочел этот HTML-код с диска, но мне нужно заменить все ссылки и ... указать на этот субдомен / домен и путь к нему.

Допустим, я не хочу использовать шаблоны для перезаписи всего HTML, который есть на диске (для размещения тегов внутри и замены тегов во время выполнения), также для простоты представьте, что у меня нет внешних ссылок(как будто я никогда не ссылаюсь на google.com [это требует условного переотображения)).

1 Ответ

4 голосов
/ 21 января 2012

Насколько я знаю, такой библиотеки нет, но вы можете использовать некоторую html-библиотеку, например lxml или BeautifulSoup вместе с urlparse стандартный питон муля Я предпочитаю использовать lxml и XPath .

Например, мы сохранили страницу StackOverflow как doc.html, и мы хотим сделать что-то с узлами, которые содержат href, src, actions:

import urlparse

import lxml.html


with open('doc.htm') as f:
    doc = lxml.html.parse(f)

for el in doc.xpath('//*[@href | @src | @action]'):
    tag = el.tag
    href = el.get('href', '')
    if not href:
        continue

    # not really need to check for '/' when using urljoin, but this is just example
    if href.startswith('/'): 
        el.attrib['href'] = urlparse.urljoin('http://stackoverflow.com/', href)

# then get string representation of tree back
result = lxml.html.tostring(doc)

В этом примере я конвертирую только относительные href, начатые с '/', в абсолютные, используя urlparse.urljoin, и не все элементы из результата XPath используются. Но вы можете настроить его под свои нужды.

...