我正在编写一个简单的python脚本,因此我可以从不同的IP地址测试我的网站。
页面的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
这个想法是'a'标签的href属性应该通过代理脚本进行路由,但css,javascript,images,forms等不应该是,所以如果它们在原始页面中是相对的,则必须使它们成为绝对的。
问题是代码并不总是有效,css可以用多种方式编写等等。我可以使用更全面的正则表达式吗?
答案 0 :(得分:3)
请阅读此处有关解析HTML的其他帖子。例如Python regular expression for HTML parsing (BeautifulSoup)和HTML parser in Python。
使用美丽的汤,而不是正则表达式。