Python проверьте, существует ли веб-сайт
Я хотел проверить, существует ли определенный веб-сайт, вот что я делаю:
user_agent = 'Mozilla/20.0.1 (compatible; MSIE 5.5; Windows NT)'
headers = { 'User-Agent':user_agent }
link = "http://www.abc.com"
req = urllib2.Request(link, headers = headers)
page = urllib2.urlopen(req).read() - ERROR 402 generated here!
Если страница не существует (ошибка 402 или любые другие ошибки), что я могу сделать в page = ...
строка, чтобы убедиться,что страница, которую я читаю, выходит?
5 ответов
вы можете использовать HEAD request вместо GET. Он будет загружать только заголовок, но не содержимое. Затем вы можете проверить состояние ответа из заголовков.
import httplib
c = httplib.HTTPConnection('www.example.com')
c.request("HEAD", '')
if c.getresponse().status == 200:
print('web site exists')
или вы можете использовать urllib2
import urllib2
try:
urllib2.urlopen('http://www.example.com/some_page')
except urllib2.HTTPError, e:
print(e.code)
except urllib2.URLError, e:
print(e.args)
или вы можете использовать requests
import requests
request = requests.get('http://www.example.com')
if request.status_code == 200:
print('Web site exists')
else:
print('Web site does not exist')
лучше проверить, что код состояния здесь. Вот что означают коды состояния (взятые из Википедия):
-
1xx
информационная -
2xx
- успех -
3xx
- перенаправление -
4xx
- клиенте ошибка -
5xx
- ошибка сервера
если вы хотите проверить, существует ли страница и не хотите загружать всю страницу, вы должны использовать Главный Запрос:
import httplib2
h = httplib2.Http()
resp = h.request("http://www.google.com", 'HEAD')
assert int(resp[0]['status']) < 400
принято от ответ.
если вы хотите загрузить всю страницу, просто сделайте обычный запрос и проверьте код состояния. Пример использования запросы:
import requests
response = requests.get('http://google.com')
assert response.status_code < 400
Смотрите также похожие темы:
- скрипт Python, чтобы увидеть, существует ли веб-страница без загрузки всей страницы?
- Проверка наличия ссылки мертв или не использует Python без загрузки веб-страницы
- как вы отправляете головной HTTP-запрос в Python 2?
- создание запроса HTTP HEAD с urllib2 из Python 2
надеюсь, что это поможет.
from urllib2 import Request, urlopen, HTTPError, URLError
user_agent = 'Mozilla/20.0.1 (compatible; MSIE 5.5; Windows NT)'
headers = { 'User-Agent':user_agent }
link = "http://www.abc.com/"
req = Request(link, headers = headers)
try:
page_open = urlopen(req)
except HTTPError, e:
print e.code
except URLError, e:
print e.reason
else:
print 'ok'
чтобы ответить на комментарий unutbu:
поскольку обработчики по умолчанию обрабатывают перенаправления (коды в диапазоне 300), А коды в диапазоне 100-299 указывают на успех, вы обычно увидите только коды ошибок в диапазоне 400-599. источник
def isok(mypath):
try:
thepage = urllib.request.urlopen(mypath)
except HTTPError as e:
return 0
except URLError as e:
return 0
else:
return 1