【问题标题】:Invalid URL parser in pythonpython中的无效URL解析器
【发布时间】:2012-08-15 10:27:54
【问题描述】:

[是的,标题没有错字!]

在 python 中,我需要一些可以解析 URL 的东西。我不敢相信一些标准还不存在。由于 URL 是在配置中设置的,因此我想确保它不是垃圾。

有 urlparse.urlparse,但它只解析“有效 URL”(某些无效 URL 有时会引发未记录的 ValueError)

例如

>>> import urlparse
>>> urlparse.urlparse('http://aa :: aa ! aa:11.com:aa').netloc
'aa :: aa ! aa:11.com:aa'

显示 urlparse 如何解析我认为无效的 URL。

【问题讨论】:

  • 你不能只使用 urlparse 并捕获错误吗?
  • 正则表达式怎么样?我猜你会找到数千个网址。

标签: python python-2.7


【解决方案1】:

URL 解析和 URL 验证实际上是不同的任务。

urlparse.urlparse进行解析,验证通常使用正则表达式机器(Python内置re模块)。

以下是来自 Django 框架的 URL 验证示例:

regex = re.compile(
    r'^(?:http|ftp)s?://' # http:// or https://
    r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|' #domain...
    r'localhost|' #localhost...
    r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' # ...or ip
    r'(?::\d+)?' # optional port
    r'(?:/?|[/?]\S+)$', re.IGNORECASE)

【讨论】:

  • 我以为有一些标准的东西,最好是直接剪切粘贴代码。但是,django.core.validators.URLValidator 正是我所需要的,谢谢:)
  • 几乎不可能用正则表达式编写一个广泛的 url 验证器。很多情况下,例如 tel: 或 mailto: 都丢失了。还有 IPv6 等等...
猜你喜欢
  • 2014-06-12
  • 2020-04-18
  • 2021-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-09
  • 2023-03-12
相关资源
最近更新 更多