2016-05-26 2 views
1

Я пытаюсь захватить HTML-источник веб-сайта с помощью Python. Однако, когда вы посещаете какую-либо страницу на сайте, есть отложенная переадресация, почти как экран загрузки. Всякий раз, когда я делаю requests.get(url), я в конечном итоге хватаю этот экран загрузки, а не то, что приходит после него. Я использую библиотеку запросов. Есть ли способ заставить запрос ждать до перенаправления? Переадресация - около 3 секунд.Захват HTML-источника после отложенного перенаправления

Вот код, я использую:

import Requests 
page = requests.get(url) 
print(page.text) 
+0

Запросы не могут быть лучшим инструментом для этого, если сайт использует javascript для рендеринга содержимого после экрана загрузки. У вас есть URL-адрес веб-сайта, который вы хотите захватить источником? – kanghj91

+0

Перенаправление, скорее всего, выполняется * в браузере *, потому что браузер выполняет Javascript-код. Либо используйте браузер без браузера, чтобы сделать то же самое, либо перепроектировать javascript для загрузки адресата напрямую. –

+0

Что такое URL? –

ответ

1

Перенаправление, вероятно, выполняется вашим браузером, а не сервером. Существует 2 общих способа: "meta refresh" или Javascript.

Для первого вы можете разобрать ответ HTML, используя что-то вроде BeautifulSoup, изучить его для тега метаобновления, извлечь целевой URL, а затем получить его со второго запроса.

Это сложнее, если перенаправление выполняется с помощью Javascript, так как существует множество способов перенаправления.

В любом случае это немного беспорядочно, поэтому лучше всего использовать что-то вроде selenium, которое в основном позволяет вам создавать сценарий вашего браузера, чтобы вы могли позволить браузеру переадресовать мета-обновление/javascript для вас.

+0

Когда я использую селен и пытаюсь распечатать источник html с 'driver.page_source', я получаю сообщение об ошибке. '[PY3] C: \ Users \ Evan \ PythonProjects> питон test.py Traceback (самый последний вызов последнего): Файл "test.py", строки 9, в печати (html_source) Файл«C : \ Users \ Evan \ Miniconda3 \ envs \ Py3 \ lib \ encodings \ cp437.py ", строка 19, in e ncode return codecs.charmap_encode (вход, self.errors, encoding_map) [0] UnicodeEncodeError: 'charmap 'codec не может кодировать символ' \ u2026 'в позиции 7006: символьные карты в ' – Gamegoofs2

+0

Это означает, что ваш терминал не может отобразить этот символ, потому что он не может представлять' \ u2026 '(горизонтальное эллипсис) в кодировке вашего терминала , который является cp437. Используйте современную терминальную кодировку, такую ​​как Windows-1251 или UTF-8. Вместо того, чтобы печатать источник html, вместо этого напишите его в файл. Тогда вы сможете проверить его. – mhawke

+0

Или 'import codec', затем используйте' page.encode ('utf-8') ', тогда он позволит мне распечатать html. – Gamegoofs2

-1

вы можете отключить автоматическое перенаправление по умолчанию характеристика, и получить страницу объекта по запросу на веб-страницу, указанную в r.history где хранить расположение перенаправлять

Смежные вопросы