Как я могу программно сказать, существует ли на веб-сервере имя файла, который я запрашиваю? - PullRequest
0 голосов
/ 03 апреля 2012

Я помогаю кому-то получить кучу (десятки тысяч) PDF-файлов с веб-сайта. У нас есть шаблон для имен файлов, но не все файлы будут существовать. Я предполагаю, что грубо просить файл, который не существует, особенно в этом масштабе. Я использую Python и в своих тестах urllib2 я обнаружил, что этот фрагмент получает мне файл, если он существует

s=urllib.urlretrieve('http://website/directory/filename.pdf','c:\\destination.pdf')

Если файл не существует, я получаю файл с именем, которое я назначил, но текст со страницы 404. Теперь я могу справиться с этим после того, как я закончу (прочитайте файлы и удалите все 404 страницы), но это не кажется слишком приятным для их сервера и не слишком питонным.

Я попытался возиться с просмотром различных функций в urllib и urlretrieve и не вижу ничего, что сообщало бы мне, существует ли файл.

1 Ответ

6 голосов
/ 03 апреля 2012

Вы можете проверить код возврата ответа.Это будет 200 для существующих PDF-файлов и 404 для несуществующих PDF-файлов.Вы можете использовать библиотеку запросы , чтобы сделать это намного проще:

>>> import requests
>>> r = requests.get('http://cdn.sstatic.net/stackoverflow/img/sprites.png')
>>> r.status_code
200
>>> r = requests.get('http://cdn.sstatic.net/stackoverflow/img/sprites.xxx')
>>> r.status_code
404
...