Расширять короткие URL-адреса в Python, используя библиотеку запросов - PullRequest
0 голосов
/ 28 июня 2019

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

short_url = "t.co/NHBbLlfCaa"
r = requests.get(short_url)
if r.status_code == 200:
    print("Actual url:%s" % r.url)

Работает отлично. Но я получаю эту ошибку, когда пингую один и тот же сервер много раз:

urllib3.exceptions.MaxRetryError: HTTPConnectionPool (host = 'www.fatlossadvice.pw', port = 80): максимальное количество попыток превышен с URL: /TIPS/KILLED-THAT-TREADMILL-WORKOUT-WORD-TO-TIMMY-GACQUIN.ASP (вызвано by NewConnectionError (': не удалось установить новое соединение: [Errno 11004] getaddrinfo не удалось ',))

Я перепробовал множество решений, например, здесь: Максимальное количество попыток превышено с URL в запросах , но ничего не помогло.

Я думал о другом решении, которое заключается в передаче идентификатора пользователя в запросе, и каждый раз, когда я изменяю его случайным образом (с использованием большого числа агентов использования):

user_agent_list = [
        'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0',
        'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:25.0) Gecko/20100101 Firefox/25.0',
        'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0',
        'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36',
    ]

r = requests.get(short_url, headers={'User-Agent': user_agent_list[np.random.randint(0, len(user_agent_list))]})
if r.status_code == 200:
    print("Actual url:%s" % r.url)

Моя проблема в том, что r.url всегда возвращает короткий URL вместо длинного (расширенного).

Чего мне не хватает?

1 Ответ

1 голос
/ 28 июня 2019

Вы можете предотвратить ошибку, добавив метод allow_redirects=False к requests.get(), чтобы предотвратить перенаправление на несуществующую страницу (и, таким образом, вызвать ошибку). Вы должны проверить заголовок, отправленный сервером самостоятельно (замените XXXX на https, удалите пробелы):

import requests

short_url = ["XXXX t.co /namDL4YHYu",
 'XXXX t.co /MjvmV',
 'XXXX t.co /JSjtxfaxRJ',
 'XXXX t.co /xxGSANSE8K',
 'XXXX t.co /ZRhf5gWNQg']

for url in short_url:
    r = requests.get(url, allow_redirects=False)
    try:
        print(url, r.headers['location'])
    except KeyError:
        print(url, "Page doesn't exist!")

Печать:

XXXX t.co/namDL4YHYu http://gottimechillinaround.tumblr.com/post/133931725110/tip-672
XXXX t.co/MjvmV Page doesn't exist!
XXXX t.co/JSjtxfaxRJ http://www.youtube.com/watch?v=rE693eNyyss
XXXX t.co/xxGSANSE8K http://www.losefattips.pw/Tips/My-stretch-before-and-after-my-workout-is-just-as-important-to-me-as-my-workout.asp
XXXX .co/ZRhf5gWNQg http://www.youtube.com/watch?v=3OK1P9GzDPM
...