Python - 检查文件/网页是否存在
我想用Python来检查一个文件或网页是否存在,主要是通过它的响应代码来判断,并根据结果采取相应的行动。不过,我有一个要求,就是必须使用HTTPS,并且需要提供用户名和密码。我尝试用curl来实现,但它对HTTPS不太友好,所以没能成功。不过,我用wget成功了,使用了--spider、--user和--password这些选项。我想我可以通过os.system把wget放进脚本里,但它输出的信息很多,解析起来会很麻烦,而且如果URI不存在(也就是404错误),它可能会卡在“等待响应...”的状态。
我在网上查了一下urllib2,看到有人做了一些相关的事情,但我不确定这些是否适合我的情况,而且那些解决方案总是很复杂(比如Python urllib2,基本HTTP认证和tr.im)。总之,如果能给我一些关于用Python实现这个功能的简单建议,我会非常感激。
补充:使用os.system的方法,并给wget加上“-q”选项,似乎可以根据URI是否存在返回不同的数字,这样我就有了一些可以利用的信息。
3 个回答
你应该使用 urllib2
来检查这个:
import urllib2, getpass
url = raw_input('Enter the url to search: ')
username = raw_input('Enter your username: ')
password = getpass.getpass('Enter your password: ')
if not url.startswith('http://') or not url.startswith('https://'):
url = 'http://'+url
def check(url):
try:
urllib2.urlopen(url)
return True
except urllib2.HTTPError:
return False
if check(url):
print 'The webpage exists!'
else:
print 'The webpage does not exist!'
opener = urllib2.build_opener(
urllib2.HTTPSHandler())
opener.open(url,data="username=%s&password=%s" %(username, password))
这段代码运行的结果是:
bash-3.2$ python url.py
Enter the url to search: gmail.com
Enter your username: aj8uppal
Enter your password:
The webpage exists!
你可以使用Python的requests库来发送一个HEAD
请求。
import requests
r = requests.head('http://google.com/sjklfsjd', allow_redirects=True, auth=('user', 'pass'))
assert r.status_code != 404
如果请求失败并出现ConnectionError
,那说明这个网站不存在。如果你只是想检查某个页面是否存在,你会收到一个成功的响应,但状态码会是404
,这表示页面找不到。
requests库的界面非常友好,所以我推荐你去试试。你可能会非常喜欢它,因为它既直观又强大,而且使用起来也很轻便。
urllib2 是打开任何网页的好方法。
urllib2.urlopen('http://google.com')
如果你想要更多功能,就需要一个带有处理器的打开器。我觉得你只需要 https,因为你几乎不需要提取任何信息。
opener = urllib2.build_opener(
urllib2.HTTPSHandler())
opener.open('https://google.com')
添加数据后,它会自动变成一个 POST 请求,我是这么认为的:
opener.open('https://google.com',data="username=bla&password=da")
你收到的对象会有一个 code
属性。
这就是基本的内容,你可以添加尽可能多的处理器,我相信这样做不会有坏处。
来源: https://docs.python.org/2.7/library/urllib2.html#httpbasicauthhandler-objects