Подтвердить что ты не робот

Python script, чтобы увидеть, существует ли веб-страница без скачивания всей страницы?

Я пытаюсь написать script для проверки наличия веб-страницы, было бы неплохо, если бы он проверял, не загружая всю страницу.

Это моя прыгающая точка, я видел, что несколько примеров используют httplib одинаково, однако каждый проверенный мной сайт просто возвращает false.

import httplib
from httplib import HTTP
from urlparse import urlparse

def checkUrl(url):
    p = urlparse(url)
    h = HTTP(p[1])
    h.putrequest('HEAD', p[2])
    h.endheaders()
    return h.getreply()[0] == httplib.OK

if __name__=="__main__":
    print checkUrl("http://www.stackoverflow.com") # True
    print checkUrl("http://stackoverflow.com/notarealpage.html") # False

Любые идеи?

Изменить

Кто-то предложил это, но их сообщение было удалено.. Неужели urllib2 не загружает всю страницу?

import urllib2

try:
    urllib2.urlopen(some_url)
    return True
except urllib2.URLError:
    return False
4b9b3361

Ответ 1

как насчет этого:

import httplib
from urlparse import urlparse

def checkUrl(url):
    p = urlparse(url)
    conn = httplib.HTTPConnection(p.netloc)
    conn.request('HEAD', p.path)
    resp = conn.getresponse()
    return resp.status < 400

if __name__ == '__main__':
    print checkUrl('http://www.stackoverflow.com') # True
    print checkUrl('http://stackoverflow.com/notarealpage.html') # False

это отправит запрос HTTP HEAD и вернет True, если код состояния ответа равен < 400.

  • обратите внимание, что корневой путь StackOverflow возвращает перенаправление (301), а не 200 OK.

Ответ 2

Используя requests, это так же просто, как:

import requests

ret = requests.head('http://www.example.com')
print(ret.status_code)

Это просто загружает заголовок веб-сайта. Чтобы проверить, успешно ли это, вы можете проверить результаты status_code. Или используйте метод raise_for_status, который вызывает Exception, если соединение не было успешным.

Ответ 3

Как насчет этого.

import requests

def url_check(url):
    #Description

    """Boolean return - check to see if the site exists.
       This function takes a url as input and then it requests the site 
       head - not the full html and then it checks the response to see if 
       it less than 400. If it is less than 400 it will return TRUE 
       else it will return False.
    """
    try:
            site_ping = requests.head(url)
            if site_ping.status_code < 400:
                #  To view the return status code, type this   :   **print(site.ping.status_code)** 
                return True
            else:
                return False
    except Exception:
        return False

Ответ 4

Вы можете попробовать

import urllib2

try:
    urllib2.urlopen(url='https://someURL')
except:
    print("page not found")