通过URL重新映射,我的意思是在实际的HTML文档中更改所有“href”和“src”以及“action”和...
是否有任何python库可以执行此类URL重映射?
在python web服务器应用程序(基于龙卷风)上,我希望能够根据某些条件修改我服务器的HTML代码。
想象一下,我从磁盘上读取了这个HTML,但是我需要替换所有的链接和...指向这个子域/域和路径或那个。
让我们说我不想使用模板来重写我在磁盘上的所有HTML(将标签放入内部并在运行时替换标签)也为了简单起见想象我没有外部链接(比如我)永远不会链接到google.com [需要条件重新映射])。
答案 0 :(得分:4)
据我所知,没有这样的库,但你可以使用一些html解析库,如lxml或BeautifulSoup以及urlparse
标准Python moule。我更喜欢使用lxml
和XPath。
例如,我们已将StackOverflow页面保存为doc.html
,我们希望对包含href
,src
,actions
的节点执行某些操作:
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结果的所有元素。但您可以根据自己的需要进行自定义。