簡體   English   中英

Python:如何用絕對URL替換文檔中的所有相對URL

[英]Python: How to replace all relative urls in a document with absolute urls

我正在為Google App Engine編寫一個應用程序,該應用程序獲取URL的內容,然后將該外部URL的內容寫入本地頁面。 我能夠做到這一點,但顯而易見的問題是相對URL指向不存在的頁面。 我對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)

注意:我不是在創建惡意應用。

這些URL相對於您正在查看的頁面的基本URL。 因此,您需要將該基礎傳遞到后端python代碼中。 如果要通過Javascript調用python,則可以使用document.URL。

或者,也許self.request.referer對您有用。

答案取決於相對URL的來源以及您如何調用python,目前尚不清楚。

我可以大致告訴您您需要做什么,但是不幸的是,這有點復雜,您可能不會喜歡它。 Python定義了一個非常通用的模板類html.parser來完成這種事情。 該類定義了feed()方法,該方法為最終用戶(例如您自己)提供訪問的主要點。 feed()方法會遍歷原始html,並且遇到不同的html標記項時,會調用不同的“處理程序”方法來處理每個方法。 實際上,您可以通過覆蓋這些“處理程序”方法來使用該類,默認情況下,這些方法大多數是空的(即,它們只是返回而沒有執行任何操作)。 我上面包含的鏈接提供了一些示例代碼,演示了如何在平凡的情況下實現此替代。

對於大多數處理程序方法,您將通過簡單地告訴處理程序打印遇到的任何項目來覆蓋空的默認邏輯,可能在適當的時候在開頭或結尾處加上一個額外的“ <”或“ \\”或“>”字符(默認情況下,解析器會將其刪除)。 這樣,您將使解析器再次簡單地再次寫出相同的html代碼即可。 但是對於其中一種處理程序方法,特別是handle_starttag()方法,您將必須提供一些其他邏輯,以便當遇到帶有“ HREF”鍵屬性的“ A”標簽時,您可以檢查與“ HREF”鍵,然后替換完整的URL地址,而不是相對地址(如果需要)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM