修复损坏的网址 [重复]
Posted
技术标签:
【中文标题】修复损坏的网址 [重复]【英文标题】:Fixing broken urls [duplicate] 【发布时间】:2010-11-29 00:19:16 【问题描述】:有谁知道修复“损坏”网址的库。当我尝试打开诸如
之类的网址时http://www.domain.com/../page.html
http://www.domain.com//page.html
http://www.domain.com/page.html#stuff
urllib2.urlopen 阻塞并给我一个 HTTPError 回溯。有谁知道可以解决这些问题的库吗?
【问题讨论】:
最后一个是完全有效的不是吗? 为什么不扫描网址(我认为是在一个网站上),然后用找到的网址,您不能使用正则表达式替换坏的,或者最坏的情况是手动替换它们? @SeanJA:最后一个对浏览器有效,但浏览器会在发送到服务器之前删除#stuff
部分。服务器可能会拒绝最后带有#stuff
的URL,这就是OP 发现urlopen
错误的原因。在向服务器询问该 URL 之前,必须删除此类词缀。
我什至不会尝试修复前两个。充其量它们可能是由于过多的复制和粘贴而导致格式错误(缺少“cgi-bin/awesomeblog”部分),最坏的情况是它们试图在 htdocs 之外窥视。您将如何“修复”example.com/../../etc/password 之类的网址
可能首先尝试确定他们为什么错了?
【参考方案1】:
诸如...之类的东西呢:
import re
import urlparse
urls = '''
http://www.domain.com/../page.html
http://www.domain.com//page.html
http://www.domain.com/page.html#stuff
'''.split()
def main():
for u in urls:
pieces = list(urlparse.urlparse(u))
pieces[2] = re.sub(r'^[./]*', '/', pieces[2])
pieces[-1] = ''
print urlparse.urlunparse(pieces)
main()
它确实会如你所愿发出:
http://www.domain.com/page.html
http://www.domain.com/page.html
http://www.domain.com/page.html
如果我理解正确的话,看起来大致符合您的需求。
【讨论】:
domain.com/ohmygod///page.html domain.com/nono/...page.html 将不起作用 对,根据 OP 给出的唯一示例,我只是在路径的开头修复破损。您可以通过path.split('/')
修复更多破损,忽略空块并移除杂散的前导点。但是有更高阶的无限可能损坏的 URL,除非给出一些规范,否则不可能知道要修复什么!-)以上是关于修复损坏的网址 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
当我尝试发布我的系统时,更新 VS2015 以修复错误时,“安装包丢失或损坏了 Visual Studio 2015”[重复]