Используя Python, как проверить, доступен сайт или нет - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть куча URL-адресов сайтов. Некоторые из этих URL больше недоступны, так как веб-сайт может быть удален или по другим причинам. Не могли бы вы помочь мне, как я могу это выяснить .. Я попробовал следующий код:

def url_ok(url):
    try:
        r = requests.head(url)
        return r.status_code
    except: 
        print("Status: False")

Я ожидал, что если во время выполнения скрипта произойдет ошибка, это, вероятно, означает, что веб-сайт больше не существует. Но, к моему удивлению, некоторые URL-адреса, помеченные как «ложные» из-за исключения, были фактически доступны, когда я пытался получить к ним доступ вручную, используя браузер. Так что я думаю, что мой код не работает .. Не могли бы вы, ребята, помочь мне, как узнать, что URL-адреса доступны или не используются python? Я использую URL-адреса в столбце «Веб-сайты» в этой таблице: URls

Ответы [ 3 ]

0 голосов
/ 06 апреля 2020

В дополнение к тому, что было сказано о requests, убедитесь, что ваши запросы на получение вызываются с allow_redirects=True.

0 голосов
/ 06 апреля 2020

Коды статуса ответа HTTP разделены на пять классов, поэтому я предлагаю просто пометить все URL, которые выдают status_code < 400, как OK. Редактировать: ответ на запрос «хорошо», работает точно так же, согласно его справке:

 |  ok
 |      Returns True if :attr:`status_code` is less than 400, False if not.
 |
 |      This attribute checks if the status code of the response is between
 |      400 and 600 to see if there was a client error or a server error. If
 |      the status code is between 200 and 400, this will return True. This
 |      is **not** a check to see if the response code is ``200 OK``.

Так что вы можете просто сделать:

import requests
r = requests.head('http://www.example.com')
print(r.ok)

Вывод:

True
...