看似“垃圾”的结果与请求

loading...


-2

我有this网页 . 当我尝试使用 requests 模块获取其html时:

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?

loading...

2回答

  • 2

    您认为"garbage"是混淆/缩小的JS代码,用 <script> 标签而不是外部JS文件编写 .

    如果你查看 f.text 的底部,你会看到 <noscript>Please enable JavaScript to view the page content.</noscript> .

    requests 不是浏览器,因此它无法执行此页面正在使用的JS代码,并且服务器将不允许不支持JS的用户代理访问它 . 将 User-Agent Headers 设置为Chrome( Chrome/60.0.3112.90 )仍然无效 .

    您将不得不求助于其他允许JS执行的工具,例如selenium .


  • -1

    HTML代码是由您看到的Javascript代码即时生成的 . 不幸的是,正如@DeepSpace所说,请求不会执行Javascript .

    作为替代方案,我建议使用硒 . 它是一个模拟浏览器的库,因此执行Javascript .

评论

暂时没有评论!