【问题标题】:Different web site response with RoboBrowser使用 RoboBrowser 的不同网站响应
【发布时间】:2016-12-22 02:31:53
【问题描述】:

我正在尝试检索网站的 HTML。当我在 Chrome 中查看该页面时,我会看到一个包含日期和费率选项的表单。但是当我使用 RoboBrowser 请求该站点时,我看到了一个完全不同的简短 HTML 响应。我做错了什么?

我的代码:

from robobrowser import RoboBrowser
browser = RoboBrowser(parser='html.parser')

browser.open('http://www.marriott.com/reservation/availabilitySearch.mi?propertyCode=ATLRZ')

print(browser.parsed)

结果:

<!DOCTYPE doctype html>

<html>
<head><script src="/common/js/marriottCommon.js" type="text/javascript"> </script>
<meta charset="utf-8">
</meta></head>
<body>
<script>
        var xhttp = new XMLHttpRequest();
        xhttp.addEventListener("load", function(a,b,c){
          window.location.reload()
        });
        xhttp.open('GET', '/reservation/availabilitySearch.mi?istl_enable=true&istl_data', true);
        xhttp.send();
      </script>
</body>
</html>

【问题讨论】:

    标签: python python-requests robobrowser


    【解决方案1】:

    尝试模仿运行 javascript 的浏览器会做什么。看起来网站在加载时正在重新加载页面。这意味着除非您拥有正确的 cookie,否则它可能不会让您访问它。 xhr 请求可能是防止机器人的额外检查。因此,请使用browser.session 保留 cookie,向 xhr 发送请求,然后尝试使用新的 cookie 重新加载页面。

    【讨论】:

    • 谢谢。我在其他请求之间打开了向 XHR 链接发送请求。这让我更进一步,但现在我得到一个“你的会话已超时”页面。
    • 您的所有请求都使用browser.session 吗?
    • 是的,因为 RoboBrowser 的每个实例都以 requests.Session() 开头,如图所示 here
    • 好吧,在浏览器中打开链接 (marriott.com/reservation/…)。这不是你的代码的错,但 url 不再有效。
    • 加载后我再次加载它并且它工作。尝试对您的请求执行相同的操作。
    猜你喜欢
    • 2018-08-18
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    • 1970-01-01
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多