2014-01-19 121 views
-2

我正在python 2.7上创建我自己的网络爬虫,它将网站下载到我的计算机的路径中,并以类似的方式将文件保存在现场例如在服务器上:如何更改HTML文件的链接到本地​​链接

https://stackoverflow.com/questions/ask?title=python+how+to+change+links+of+html+file+to+local+links

我将计算器的目录里面的问题,并在里面这个网页的HTML文件的目录...

我怎样才能改变链接到互联网页面链接到我下载的页面,如果它们已经存在于我的电脑上?

例如,如果有: <a href="https://stackoverflow.com/questions">所以我将通过蟒蛇改变这个网站码到 <a href="/questions">或这样的事情..

我不知道是否有帮助,但是这是我使用的功能 高清downloadFile(路径,URL):在一个单一的文件下载

try : 
    print "Downloading : " + url 
    path=path + urlparse(url).path 
    path , fileName = pathNameSplit(path) 


    make_sure_path_exists(path) 



    print "trying to downoad " + fileName 
    if (fileName.count(".") == 0):fileName = fileName + ".html" 
    #pickle.dump(url2Html(url) , open(path + fileName, "w")) 

    urllib.urlretrieve(url, path + fileName) 
    print "Download of " + url + " Completed" 
except Exception: 
    print "Sometihng occured in the download of " + url 
+0

如果我是你,我禾uld使用[请求](http://docs.python-requests.org/en/latest/)而不是urllib –

回答

1

每当你抢链接和网页保存到路径,保存链接和字典的路径。

你还需要确保一些东西 1.每个路径是唯一的链接(类型的可选,但真的有用,我猜) 2.你没有覆盖到那个路径从另一个链接的任何其他页面

然后,完成爬网后,您需要编辑“手动”(当然,与一些python代码)下载的文件中的链接,而不是指向您的文件文件系统。

通过手动编辑,我的意思是使用某个模块(re)来搜索并替换下载文件中的字符串。

执行此转换后,您将失去对作为文件原始源的网页的引用。

如果您需要保留原来的在线url,您可以简单地为每个URL指定一个唯一的ID,并将其存储在本地数据库中(当然还有文件系统路径 - 您下载文件的位置)。

如果您自己无法做到这一点,请寻求更多帮助。

[编辑]重新模块 好,你可以做以下

import re 

html_file_content = u"asdf 1234 this should contain the source code of a html page that you downloaded" 
pattern = u"http://the-url-from-which-you-downloaded-the-html-file.com" 
path = u"d:/whatever/path/where/you/downloaded/the/html/file" 
new_file_content = re.sub(pattern, path, a) 

名称new_file_content将源文件与文件系统路径,而不是一个链接.. 。一定要连接一个文件://到path变量的开头,所以浏览器可以识别这是一个有效的链接(如file://d:/downloads/python_crawler,不仅仅是d:/downloads/python_crawler

+1

你可以帮助使用部分: “使用某个模块(重新)来搜索并替换你的内部字符串下载的文件。“ – tamirz12345

+0

我在猜测're.sub(pattern,path,a)'应该是're.sub(pattern,path,html_file_content)'? – Lonefish