0

Я пытаюсь сканировать веб-сайт с помощью библиотеки запросов в Python, и когда я пытаюсь:Как остановить перенаправление URL-адреса 302 при простом сканировании в Интернете?

r = requests.get('http://www.cell.com/cell-stem-cell/home', allow_redirects = False) 
>>> r.status_code 
302 
>>> r.text 
'The URL has moved <a href="https://secure.jbs.elsevierhealth.com/action/getSharedSiteSession?redirect=http%3A%2F%2Fwww.cell.com%2Fcell-stem-cell%2Fhome&rc=0&code=cell-site">here</a>\n' 

и когда я пытаюсь:

>>> r = requests.get("https://secure.jbs.elsevierhealth.com/action/getSharedSiteSession?redirect=http%3A%2F%2Fwww.cell.com%2Fcell-stem-cell%2Fhome&rc=0&code=cell-site") 
>>> 
>>> r.text 
'\n\n\n\n\n<style type="text/css">\n .hidden {\n  display: none;\n  visibility: hidden;\n }\n</style>\n\n<!-- hidden iFrame for each of the SSO URLs -->\n<div class="hidden">\n \n  <iframe src="//acw.secure.jbs.elsevierhealth.com/SSOCore/update?utt=81c120bb854495181ef4ef3f679b12261e956c5-JKh">Your browser doesn\'t support iFrames!</iframe>\n \n  <iframe src="//acw.sciencedirect.com/SSOCore/update?utt=81c120bb854495181ef4ef3f679b12261e956c5-JKh">Your browser doesn\'t support iFrames!</iframe>\n \n  <iframe src="//acw.scopus.com/SSOCore/update?utt=81c120bb854495181ef4ef3f679b12261e956c5-JKh">Your browser doesn\'t support iFrames!</iframe>\n \n  <iframe src="//acw.sciverse.com/SSOCore/update?utt=81c120bb854495181ef4ef3f679b12261e956c5-JKh">Your browser doesn\'t support iFrames!</iframe>\n \n  <iframe src="//acw.mendeley.com/SSOCore/update?utt=81c120bb854495181ef4ef3f679b12261e956c5-JKh">Your browser doesn\'t support iFrames!</iframe>\n \n  <iframe src="//acw.elsevier.com/SSOCore/update?utt=81c120bb854495181ef4ef3f679b12261e956c5-JKh">Your browser doesn\'t support iFrames!</iframe>\n \n</div>\n\n\n\n<noscript>\n <a href="CANT POST LINK BECAUSE OF LACK OF REPUTATION POINTS OF STACK OVERFLOW">Redirect</a>\n</noscript>\n\n<!-- redirect to the product page after all iFrames are rendered -->\n<script>\n setTimeout(redirectFun,2000);\n var iFramesList = document.getElementsByTagName("iframe");\n var renderedIFramesCount = 0;\n var numberOfIFrames = iFramesList.length;\n for (var i = 0; i < iFramesList.length; i++) {\n  var iFrame = iFramesList[i];\n  bindEvent(iFrame, \'load\', function(){\n   renderedIFramesCount = renderedIFramesCount + 1;\n   if (renderedIFramesCount >= numberOfIFrames)\n   {\n    redirectFun();\n   }\n  });\n }\n var doRedirect = true;\n function redirectFun() {\n  if (doRedirect)\n   window.location.href = "CANT POST THIS WEBSITE BECAUSE OF MY REPUTATION POINTS ON STACKOVERFLOW";\n  doRedirect = false;\n }\n\n function bindEvent(el, eventName, eventHandler) {\n  if (el.addEventListener){\n   el.addEventListener(eventName, eventHandler, false);\n  } else if (el.attachEvent){\n   el.attachEvent(eventName, eventHandler);\n  }\n }\n</script>\n\n' 

Я просто хочу, чтобы получить HTML оригинала Веб-сайт.

+0

Примечание: r.text гласит: URL переехал сюда \ п, с «A HREF» в ссылке в запросе второй ПОЛУЧИТЬ –

+0

Попробуйте использовать селен. Он имитирует браузер, поэтому может не возникнуть проблема. –

ответ

1

Вы должны отправить User-agent по заголовкам запроса, чтобы веб-сайт считал, что запрос поступает из реального веб-браузера. Так что если вы хотите, чтобы содержимое не-перенаправлены URL ваш код должен быть

from requests import get 
content = get('http://www.cell.com/cell-stem-cell/home', headers = {'User-agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 
(KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'},allow_redirects = False).content 
print content 

Выход будет:

The URL has moved <a href="https://secure.jbs.elsevierhealth.com/action/getShar 
edSiteSession?redirect=http%3A%2F%2Fwww.cell.com%2Fcell-stem-cell%2Fhome&rc=0&co 
de=cell-site">here</a> 

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

+0

, что определенно имеет смысл, но вы можете расширить его: «Если вы хотите, чтобы содержимое перенаправленного URL-адреса разрешало перенаправление, но включало заголовок user-agent», пожалуйста? –

+0

Если вам нужны данные из перенаправленного URL-адреса, тогда ваш запрос должен быть 'content = get ('http://www.cell.com/cell-stem-cell/home', headers = {'User-agent': 'Mozilla /5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, как и Gecko) Chrome/41.0.2228.0 Safari/537.36 '}). Content', где контент будет содержать html-источник перенаправленного URL-адреса. По умолчанию запросы обрабатывают перенаправление, поэтому 'allow_redirects = True' не требуется. – Mani

0

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

r = requests.get('http://www.cell.com/cell-stem-cell/home') 
if r.status_code==302: 
    r1 = requests.get(r.headers['Location']) 

вы будете иметь ваши необходимые данные в r1.content или r1.text

+0

Чтобы обработать все перенаправления в приведенном выше коде, вы можете проверить это. 'if r.status_code/100 == 3:' поэтому это будет работать для всех перенаправлений, таких как 300,301,303,304, .... – Mani