2012-01-21 52 views
2

通过URL重映射,我的意思是在实际的HTML文档中更改所有“href”和“src”以及“action”和...。在HTML中,在python中的URL重映射库

是否有任何python库来做这种类型的URL重新映射?

在python web服务器应用程序(基于龙卷风)上,我希望能够修改基于某些条件的服务器的HTML代码。

想象一下,我从磁盘读取这个HTML,但我需要替换所有的链接和...指向这个子域/域和路径或那一个。

可以说我不想使用模板来重写我在磁盘上的所有HTML(将标记放入并在运行时替换标记)还可以为了简单起见想象我没有外部链接(如我从来没有链接到google.com [需要有条件的重新映射])。

回答

4

据我所知,目前还没有这样的库,但你可以用urlparse标准Python MOULE一起使用一些HTML解析库像lxmlBeautifulSoup。我更喜欢使用lxmlXPath

例如,我们有救的StackOverflow页面doc.html,我们希望做一些与包含hrefsrcactions节点:

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“ s以'/'开始,绝对使用urlparse.urljoin,而不是使用来自XPath结果的所有元素。但您可以根据自己的需求进行定制。