18

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

我错过了什么,还是没有一种标准的方法来验证 URL?

4

5 回答 5

26

这看起来可能与如何在 Python 中使用正则表达式验证 URL?

您应该能够使用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

于 2014-03-06T23:12:21.897 回答
21

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

  • 针对 Python 2.7、3.4、3.5、3.6、3.7 和 3.8 进行了测试
  • 不依赖 Python 3.x,Python 2.x 中的一个条件依赖(直接替换 Python 2.x 的错误re模块)
  • 涵盖 100 多种不同的成功/失败 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)

value = validators.url('https://123.12.34.56:1234')
# value set to 'https://123.12.34.56:1234'

value = validators.url('http://10.0.0.1')
# raises a validator_collection.errors.InvalidURLError (which is a ValueError)

value = validators.url('http://10.0.0.1', allow_special_ips = True)
# value set to 'http://10.0.0.1'

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

于 2018-07-22T20:48:27.750 回答
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在这种情况下,这将

于 2018-07-18T10:44:15.563 回答
1

我会使用验证器包。这是文档和安装说明的链接。

就这么简单

import validators
url = 'YOUR URL'
validators.url(url)

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

于 2018-07-17T21:06:20.633 回答
-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 = ...”行没有错误,则 url 有效。

于 2014-03-06T23:26:43.413 回答