看似 "garbage" 请求的结果
Seemingly "garbage" result with requests
我有 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?
你认为"garbage"是obfuscated/minified JS代码,写在<script>
标签中而不是外部JS文件。
如果您查看 f.text
的底部,您会看到 <noscript>Please enable JavaScript to view the page content.</noscript>
。
requests
不是浏览器,因此无法执行本页面使用的JS代码,服务器不会让不支持JS的user-agents访问。将 User-Agent
header 设置为 Chrome 的 (Chrome/60.0.3112.90
) 仍然无效。
你将不得不求助于其他允许 JS 执行的工具,例如 selenium。
HTML 代码是由您看到的 Javascript 代码即时生成的。不幸的是,正如@DeepSpace 所说,请求不会执行 Javascript.
作为替代方案,我建议使用硒。它是一个模拟浏览器并执行 Javascript.
的库
我有 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?
你认为"garbage"是obfuscated/minified JS代码,写在<script>
标签中而不是外部JS文件。
如果您查看 f.text
的底部,您会看到 <noscript>Please enable JavaScript to view the page content.</noscript>
。
requests
不是浏览器,因此无法执行本页面使用的JS代码,服务器不会让不支持JS的user-agents访问。将 User-Agent
header 设置为 Chrome 的 (Chrome/60.0.3112.90
) 仍然无效。
你将不得不求助于其他允许 JS 执行的工具,例如 selenium。
HTML 代码是由您看到的 Javascript 代码即时生成的。不幸的是,正如@DeepSpace 所说,请求不会执行 Javascript.
作为替代方案,我建议使用硒。它是一个模拟浏览器并执行 Javascript.
的库