Python:如何使用绝对URL替换文档中的所有相对URL

时间:2013-12-28 01:24:41

标签: python google-app-engine

我正在为Google App Engine编写一个应用程序,用于获取网址的内容,然后将该外部网址的内容写入本地网页。我能够做到这一点,但显而易见的问题是相对网址指向不存在的页面。我对python不是很有经验,所以在我自己编写这样的代码可能需要数年时间。

到目前为止,这是我的代码:

url = "http://www.google.com/"
try:
  result = urllib2.urlopen(url)
  self.response.out.write(result.read())
except urllib2.URLError, e:
  self.response.out.write(e)

注意:我没有创建恶意应用程序。

2 个答案:

答案 0 :(得分:0)

网址将与您正在查看的网页的基本网址相关。所以你需要将这个基础传递到你的后端python代码中。如果从Javascript调用python,可以使用document.URL。

或者,self.request.referer可能会对你有用。

答案取决于相对URL的来源以及你如何调用你的python,你的问题并不清楚。

答案 1 :(得分:0)

我可以广泛地告诉你你需要做什么,但不幸的是,它有点复杂,你可能不会喜欢它。 Python定义了一个非常通用的模板类html.parser来完成这类事情。该类定义了一个feed()方法,该方法为最终用户(如您自己)提供了访问的主要访问点。 feed()方法遍历原始html,并且当遇到不同的html标记项时,它会调用不同的“处理程序”方法来处理每个。实际上,您通过覆盖这些“处理程序”方法来使用该类,其中大多数方法都是空的(即,它们只是在没有做任何事情的情况下返回)默认情况下。我上面提到的链接提供了一些示例代码,演示了如何为普通情况实现此覆盖。

对于大多数处理程序方法,您将通过简单地告诉处理程序打印它遇到的任何项目来覆盖空的默认逻辑,可能还有一个额外的“<”或“\”或“>”根据需要在开头或结尾打印的字符(解析器默认将它们删除)。通过这种方式,您将使解析器只是再次完全相同地写出相同的html代码。但是对于其中一个处理程序方法,特别是handle_starttag()方法,您必须提供一些额外的逻辑,以便在遇到带有“HREF”键入属性的“A”标记时,检查与“HREF”关联的值。 HREF“键,然后替换完整的URL地址而不是相关地址(如果需要)。