Ваш первый URL 404 для меня. Интересно, что я просто попробовал это со вторым URL, и это сработало, но я использовал другой пользовательский агент. Затем я попробовал это с вашим пользовательским агентом, и он не перенаправляет.
Это говорит о том, что веб-сервер делает что-то странное в ответ на эту строку пользовательского агента, и проблема не в requests
.
>>> import requests
>>> user_agent = 'foo'
>>> url = 'THE_DISCUS_URL'
>>> s = requests.Session()
>>> s.headers['User-Agent'] = user_agent
>>> r = s.get(url, allow_redirects=True, timeout=10)
>>> r.url
'https://www.elsevier.com/connect/could-dissolvable-microneedles-replace-injected-vaccines'
против
>>> import requests
>>> user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36'
>>> url = 'THE_DISCUS_URL'
>>> s = requests.Session()
>>> s.headers['User-Agent'] = user_agent
>>> r = s.get(url, allow_redirects=True, timeout=10)
>>> r.url
'THE_DISCUS_URL'
Мне стало любопытно, поэтому я исследовал немного больше. Фактическим содержанием ответа является тег noscript со ссылкой и некоторый javascript, который выполняет перенаправление.
Вероятно, здесь происходит то, что, если Discus видит реального агента пользователя веб-браузера, он пытается перенаправить его через javascript (и, вероятно, выполняет кучу отслеживания в процессе). С другой стороны, если пользовательский агент не знаком, сайт предполагает, что посетитель является скриптом, который, вероятно, не может выполнять JavaScript, и просто перенаправляет.