【问题标题】:Python Proxy ScriptPython 代理脚本
【发布时间】:2008-12-29 19:19:08
【问题描述】:

我正在编写一个简单的 python 脚本,以便我可以从不同的 IP 地址测试我的网站。

页面的 url 在查询字符串中给出,脚本获取页面并将其显示给用户。下面的代码用于重写包含 urls 的标签,但我认为它不完整/完全正确。

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

这个想法是'a'标签的href属性应该通过代理脚本路由,但css、javascript、图像、表单等不应该,所以如果它们在原始页面中是相对的,则必须将它们设为绝对。

问题是代码并不总是有效,css 可以用多种方式编写等等。有没有更全面的正则表达式我可以使用?

【问题讨论】:

  • 可能是一个愚蠢的问题,但您是否考虑过简单地编写一个真正的 http 代理?使用真正的代理,您不必重写任何内容,因为您的浏览器将被明确配置为使用它。它通常会更好地工作,并且更容易编写。

标签: python proxy


【解决方案1】:

请在此处阅读有关解析 HTML 的其他帖子。例如Python regular expression for HTML parsing (BeautifulSoup)HTML parser in Python

使用 Beautiful Soup,而不是正则表达式。

【讨论】:

    猜你喜欢
    • 2017-11-17
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    • 2013-09-05
    相关资源
    最近更新 更多