内部HTML,python中的URL重映射库

时间:2012-01-21 15:03:38

标签: python html rewrite tornado

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

是否有任何python库可以执行此类URL重映射?

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

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

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

1 个答案:

答案 0 :(得分:4)

据我所知,没有这样的库,但你可以使用一些html解析库,如lxmlBeautifulSoup以及urlparse标准Python moule。我更喜欢使用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将以'/'开头的相对urlparse.urljoin转换为绝对,而不是使用来自XPath结果的所有元素。但您可以根据自己的需要进行自定义。