Найти окончательный перенаправленный URL-адрес в Python

import requests

def extractlink():
    with open('extractlink.txt', 'r') as g:
        print("opened extractlink.txt for reading")
        contents = g.read()
        headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}
        r = requests.get(contents, headers=headers)
        print(("Links to " + r.url))
        time.sleep (2)

В настоящее время r.url просто ссылается на URL-адрес из файла extractlink.txt.

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

При отладке r.history читается как [], а r.status_code читается как 403, даже если ссылка перенаправляется как 302 в браузере. Любые идеи?

(extractlink.txt - это всего лишь однострочный файл со ссылкой на http://butterup.teechip.icu/, вводите с осторожностью, сайт спама)

requests.get по умолчанию должен следовать перенаправлениям. Можешь включить r.history?
Cole 18.12.2018 00:49

Куда следует включить r.history? Я полагаю, вы имеете в виду просто печать для отладки? Спасибо @Cole

Dann 18.12.2018 00:51

печать (r.history)

nicholishen 18.12.2018 00:52
r.history читается как []
Dann 18.12.2018 00:53
r.status_code также читается как 403, URL-адрес должен иметь редирект 302.
Dann 18.12.2018 01:05

Привет, я новичок в stackoverflow, есть ли причина, по которой мои сообщения продолжают получать отрицательные голоса? Я изо всех сил старался предоставить достоверную информацию / цели и весь необходимый код.

Dann 18.12.2018 03:49

@Dansey Забудьте о голосах против, они анонимны и должны быть анонимными. Мотивация проголосовать за / против может быть субъективной, поэтому не стоит придавать ей особого значения. Если вы считаете, что это лучший вопрос, который вы можете задать, тогда все в порядке, но затем улучшите свой вопрос. Прочтите руководство Как спросить и пройдите тур, если вы еще этого не сделали.

eyllanesc 18.12.2018 03:59

@Dansey Если вам нужна помощь в SO, вы должны предоставить минимальный воспроизводимый пример.

eyllanesc 18.12.2018 04:37

@eyllanesc Я не знаю, что еще вам нужно, я предоставил все, кроме ссылки (которая перенаправляет на спам / вредоносный сайт); Я не буду уделять больше внимания таким URL-адресам. Как я уже сказал, на выходе получается действительный URL-адрес, который работает в браузере согласно print (r.history): его легко можно воссоздать.

Dann 18.12.2018 05:32

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

eyllanesc 18.12.2018 05:45

@Dansey, например, перенаправление может быть выполнено с помощью js, и, следовательно, библиотека запросов не будет работать, вы должны использовать селен, если это так. это обычно происходит в ссылках, которые через n секунд перенаправляют вас

eyllanesc 18.12.2018 05:47
r.url - это последний URL-адрес перенаправления! r.history пустой список означает, что вы не были перенаправлены. Если вы успешно получаете доступ в браузере, проблема, почему вы не были перенаправлены, заключается в том, что вы отправляете неверный запрос, и сервер ответил 403 вместо 302.
KC. 18.12.2018 05:57

Итак, я предлагаю добавить свой пример URL-адреса. Или вы сами пытаетесь понять, чего не хватает в вашем запросе. Кстати, есть много причин, по которым вы получаете неожиданный ответ (облачная вспышка и т. д.). Если вы не предоставите пример URL-адреса, я могу дать только ваше предложение вместо ответа.

KC. 18.12.2018 06:03

Нет проблем, @kcorlidy. Вот URL, вводите с осторожностью. http://butterup.teechip.icu/

Dann 18.12.2018 06:18

Я тестировал ваш код и URL-адрес, и URL-адрес ответил 302. И я был перенаправлен на http://newtshirtshop.com/buckle-up-butter-up.

KC. 18.12.2018 06:27

Я заметил ваш код: contents = g.read(). Можете ли вы распечатать его и посмотреть, является ли это законным URL-адресом http. Кстати, когда вы открыли http://butterup.teechip.icu/ и получили 403?

KC. 18.12.2018 06:33

Да, для меня скрипт возвращает 403.

Dann 18.12.2018 06:40

Как ни странно, печать g.read () оказалась пустой! Есть идеи, почему? @kcorlidy

Dann 18.12.2018 06:46

Простите за грубое предложение. Можете ли вы попытаться получить доступ к URL-адресу через жесткий код вместо чтения файла (интересно, произошла ли ошибка при запросах или при чтении файла). Если это произошло при чтении файла, прочтите stackoverflow.com/questions/16374425/…

KC. 18.12.2018 06:59

@kcorlidy, я изучил проблему и уже наткнулся на эту ссылку, я добавил код в свой скрипт, но чтение все еще остается пустым.

Dann 18.12.2018 08:03

@kcorlidy Жесткое кодирование URL-адреса по-прежнему приводит к тому, что конечный URL-адрес остается прежним.

Dann 18.12.2018 08:05

Есть какое-нибудь решение?

Dann 18.12.2018 23:40
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
22
251
1

Ответы 1

Код состояния HTTP 403 означает, что вы не авторизованы для просмотра конечной точки. Это означает, что либо вам нужно войти в систему, либо вам могут не хватать заголовков. Вы можете проверить заголовки, используемые браузером, на вкладке сети элемента насекомого. Попробуйте использовать тот же заголовок, что и в браузере.

Другие вопросы по теме