Сценарий Python, чтобы увидеть, существует ли веб-страница без загрузки всей страницы? - PullRequest
16 голосов
/ 24 июня 2011

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

Это моя отправная точка, яв нескольких примерах использование 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

Ответы [ 4 ]

22 голосов
/ 24 июня 2011

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

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. </p>

  • заметит, что корневой путь StackOverflow возвращаетперенаправление (301), а не 200 OK.
9 голосов
/ 08 апреля 2016

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

import requests

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

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

3 голосов
/ 07 апреля 2017

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

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's 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
0 голосов
/ 08 апреля 2016

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

import urllib2

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