我一直在试图找出验证URL的最佳方法(特别是在Python中),但实际上并没有找到答案。似乎没有一种已知的方法来验证URL,这取决于您认为可能需要验证的URL。同样,我发现很难找到易于阅读的URL结构标准。我确实找到了RFC 3986和3987,但它们包含的不仅仅是它的结构。
我遗漏了什么,或者没有一种标准方法可以验证网址?
答案 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
具有scheme
和netloc
答案 1 :(得分:5)
最初的问题有点老了,但是您可能还想看看我几个月前发布的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)
此外,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 = ...”行没有错误,则该网址有效。