我一直在试图弄清楚验证 URL 的最佳方法是什么(特别是在 Python 中),但还没有真正找到答案。似乎没有一种已知的验证 URL 的方法,这取决于您认为可能需要验证的 URL。同样,我发现很难找到一个易于阅读的 URL 结构标准。我确实找到了 RFC 3986 和 3987,但它们包含的不仅仅是它的结构。
我错过了什么,还是没有一种标准的方法来验证 URL?
我一直在试图弄清楚验证 URL 的最佳方法是什么(特别是在 Python 中),但还没有真正找到答案。似乎没有一种已知的验证 URL 的方法,这取决于您认为可能需要验证的 URL。同样,我发现很难找到一个易于阅读的 URL 结构标准。我确实找到了 RFC 3986 和 3987,但它们包含的不仅仅是它的结构。
我错过了什么,还是没有一种标准的方法来验证 URL?
这看起来可能与如何在 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
属性scheme
netloc
最初的问题有点老了,但您可能还想看看我几个月前发布的Validator-Collection库。它包括高性能的基于正则表达式的 URL 验证,以符合 RFC 标准。一些细节:
re
模块)它也很容易使用:
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)、域和电子邮件地址,因此人们可能会发现一些有用的东西。
您还可以尝试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
在这种情况下,这将
我会使用验证器包。这是文档和安装说明的链接。
就这么简单
import validators
url = 'YOUR URL'
validators.url(url)
如果是则返回 true,否则返回 false。
假设您使用的是 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 有效。