验证Python中的URL

时间:2014-03-06 23:04:25

标签: python url url-validation

我一直在试图找出验证URL的最佳方法(特别是在Python中),但实际上并没有找到答案。似乎没有一种已知的方法来验证URL,这取决于您认为可能需要验证的URL。同样,我发现很难找到易于阅读的URL结构标准。我确实找到了RFC 3986和3987,但它们包含的不仅仅是它的结构。

我遗漏了什么,或者没有一种标准方法可以验证网址?

5 个答案:

答案 0 :(得分:19)

这看起来可能与How do you validate a URL with a regular expression in Python?

重复

您应该能够使用那里描述的urlparse库。

>>> from urllib.parse import urlparse # python2: from urlparse import urlparse
>>> urlparse('actually not a url')
ParseResult(scheme='', netloc='', path='actually not a url', params='', query='', fragment='')
>>> urlparse('http://google.com')
ParseResult(scheme='http', netloc='google.com', path='', params='', query='', fragment='')

在您要检查的字符串上调用urlparse,然后确保ParseResult具有schemenetloc

的属性

答案 1 :(得分:5)

最初的问题有点老了,但是您可能还想看看我几个月前发布的Validator-Collection库。它包括高性能的基于正则表达式的URL验证,以符合RFC标准。一些细节:

  • 经过Python 2.7、3.4、3.5、3.6测试
  • 没有对Python 3.x的依赖,在Python 2.x中是一个条件依赖(Python 2.x的错误re模块的直接替代)
  • 单元测试涵盖了大约80种不同的成功/失败URL模式,包括非标准字符等。据我所知,它几乎涵盖了RFC标准的整个范围。

它也非常易于使用:

from validator_collection import validators, checkers

checkers.is_url('http://www.stackoverflow.com')
# Returns True

checkers.is_url('not a valid url')
# Returns False

value = validators.url('http://www.stackoverflow.com')
# value set to 'http://www.stackoverflow.com'

value = validators.url('not a valid url')
# raises a validator_collection.errors.InvalidURLError (which is a ValueError)

此外,Validator-Collection还包括大约60多个其他验证器,包括域和电子邮件地址,因此人们可能会发现有用的东西。

答案 2 :(得分:1)

我将使用验证程序包。这是文档和安装说明的link

就像

一样简单
import validators
url = 'YOUR URL'
validators.url(url)

如果是,则返回true,否则返回false。

答案 3 :(得分:1)

您还可以尝试使用urllib.request进行验证,方法是在urlopen函数中传递URL并捕获URLError的异常。

from urllib.request import urlopen, URLError

def validate_web_url(url="http://google"):
    try:
        urlopen(url)
        return True
    except URLError:
        return False

在这种情况下,这return False

答案 4 :(得分:-1)

假设您使用的是python 3,则可以使用urllib。代码将是这样的:

import urllib.request as req
import urllib.parse as p

def foo():
    url = 'http://bar.com'
    request = req.Request(url)
    try:
        response = req.urlopen(request)
        #response is now a string you can search through containing the page's html
    except:
        #The url wasn't valid

如果“response = ...”行没有错误,则该网址有效。