Скрипт Python Proxy - PullRequest
       11

Скрипт Python Proxy

0 голосов
/ 29 декабря 2008

Я пишу простой скрипт на Python, чтобы я мог тестировать свои сайты с другого IP-адреса.

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

def rel2abs(rel_url, base=loc):
    return urlparse.urljoin(base, rel_url)

def is_proxy_else_abs(tag, attr):
    if tag in ('a',):
        return True
    if tag in ('form', 'img', 'link') and attr in ('href', 'src', 'action', 'background'):
        return False

def repl(matchobj):
    if is_proxy_else_abs(matchobj.group(1).lower(), matchobj.group(3).lower()):
        return r'<%s %s %s="http://%s?%s" ' %(proxy_script_url, matchobj.group(1), matchobj.group(2), matchobj.group(3), urllib.urlencode({'loc':rel2abs(matchobj.group(5))}))
    else:
        return r'<%s %s %s="%s" ' %(matchobj.group(1), matchobj.group(2), matchobj.group(3), rel2abs(matchobj.group(5)))

def fix_urls(page):
    get_link_re = re.compile(r"""<(a|form|img|link) ([^>]*?)(href|src|action|background)\s*=\s*("|'?)([^>]*?)\4""", re.I|re.DOTALL)
    page = get_link_re.sub(repl, page)
    return page

Идея заключается в том, что атрибуты href тега 'a' должны передаваться через прокси-скрипт, но не должны быть css, javascript, изображения, формы и т. Д., Поэтому они должны быть абсолютными, если они относительно на исходной странице.

Проблема в том, что код не всегда работает, CSS может быть написан несколькими способами и т. Д. Есть ли более полное регулярное выражение, которое я могу использовать?

1 Ответ

3 голосов
/ 29 декабря 2008

Пожалуйста, прочитайте другие сообщения здесь о разборе HTML. Например, Регулярное выражение Python для разбора HTML (BeautifulSoup) и Анализатор HTML в Python .

Используйте Beautiful Soup, а не регулярные выражения.

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