Использование запросов для смешивания URL-адресов в Python 3.x - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть файл .txt, который содержит список URL. Структура URL-адресов различна - некоторые могут начинаться с https , некоторые с http , другие с www*1006*, а другие только с именем домена ( * 1009 stackoverflow.com *). Итак, пример содержимого файла .txt: -

www.google.com
microsoft.com
https://www.yahoo.com
http://www.bing.com

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

import requests

with open('urls.txt', 'r') as f:
    urls = f.readlines()
    for url in urls:
        url = url.replace('\n', '')
        if not url.startswith('http'):  #This is to handle just domain names and those that begin with 'www'
            url = 'http://' + url
        if url.startswith('http:'):
            print("trying url {}".format(url))
            response = requests.get(url, timeout=10)
            status_code = response.status_code
            if status_code == 200:
                continue
            else:
                print("URL {} has a response code of {}".format(url,  status_code))
                print("encountered error. Now trying with https")
                url = url.replace('http://', 'https://')
                print("Now replacing http with https and trying again")
                response = requests.get(url, timeout=10)
                status_code = response.status_code
                print("URL {} has a response code of {}".format(url,  status_code))
        else:
            response = requests.get(url, timeout=10)
            status_code = response.status_code
            print("URL {} has a response code of {}".format(url,  status_code))

Я чувствую, что несколько усложнил это, и должен быть более простой способ попробовать варианты (ie. Domain name, домен с 'www' на начиная с «http» в начале и с «https: //» в начале, пока сайт не будет определен как работающий или нет (ie. все переменные исчерпаны).

Any предложения по моему коду или лучший способ подойти к этому? По сути, я хочу обработать форматирование URL, чтобы затем попытаться проверить статус URL.

Заранее спасибо

1 Ответ

0 голосов
/ 04 февраля 2020

Это слишком долго для комментария, но, да, его можно упростить, начиная с и заменяя часть startswith:

if not '//' in url:
      url = 'http://' + url
      response = requests.get(url, timeout=10)

et c.

...