Казалось бы, "мусор" результат с запросами - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть эта веб-страница.Когда я пытаюсь получить html, используя requests модуль, подобный этому:

import requests

link = "https://www.worldmarktheclub.com/resorts/7m/"
f = requests.get(link)
print(f.text)

, я получаю такой результат:

<!DOCTYPE html>
<html><head>
<meta http-equiv="Pragma" content="no-cache"/>
<meta http-equiv="Expires" content="-1"/>
<meta http-equiv="CacheControl" content="no-cache"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<link rel="shortcut icon" href="data:;base64,iVBORw0KGgo="/>

<script>

(function(){
    var securemsg;
    var dosl7_common;

// seemingly garbage like [Z.li]+Z._j+Z.LO+Z.SJ+"(/.{"+Z.i+","+Z.Ii+"}

</script>

<script type="text/javascript" src="/TSPD/08e841a5c5ab20007f02433a700e2faba779c2e847ad5d441605ef3d4bbde75cd229bcdb30078f66?type=9"></script>
<noscript>Please enable JavaScript to view the page content.</noscript>
</head><body>
</body></html>

Показана только часть результата.Но я могу видеть правильный HTML, когда я проверяю веб-страницу в браузере.Я думаю, что может быть проблема с кодировкой страницы, но не могу понять это.Использование urllib.request + read() дает тот же неверный результат.Как мне исправить это.Заранее спасибо.

Как предполагает @DeepSpace, проблема с мусором в скрипте связана с уменьшенным кодом JS.Но почему я не получаю HTML правильно?

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

HTML-код создается на лету с помощью кода Javascript, который вы видите.К сожалению, как сказал @DeepSpace, запросы не выполняют Javascript.

В качестве альтернативы я предлагаю использовать селен.Это библиотека, которая имитирует браузер и выполняет Javascript.

0 голосов
/ 10 декабря 2018

То, что вы считаете «мусором», - это запутанный / минимизированный JS-код, который записывается в тегах <script> вместо внешнего JS-файла.

Если вы посмотрите внизу f.text, выувидит <noscript>Please enable JavaScript to view the page content.</noscript>.

requests не является браузером, следовательно, он не может выполнить код JS, который использует эта страница, и сервер не позволит агентам пользователя, которые не поддерживают JS,доступ к нему.Установка заголовка User-Agent для Chrome (Chrome/60.0.3112.90) по-прежнему не работает.

Вам придется прибегнуть к другим инструментам, разрешающим выполнение JS, таким как селен.

...