【问题标题】:infinite scroll - how to scrape website无限滚动 - 如何抓取网站
【发布时间】:2013-04-01 18:20:23
【问题描述】:

我正在尝试下载一个在获取结果时具有无限滚动的页面。我找到了 ajax 源的 url。当我把它放在浏览器上时它工作正常并返回 json 格式数据。但是当我尝试通过 wget 下载页面时,我收到拒绝访问消息。你知道为什么会这样吗?

我使用的命令是:

wget --cookies=on --load-cookies=cookies.txt --keep-session-cookies --user-agent=Firefox \
    "https://www.somesite.com/ajax/pagelet/generic.php/pagination?data={"collection_token":"...","cursor":"...","tab_key":"....","profile_id":"...","overview":"...","ftid":"null","sk":"..."}&__user=...&__a=1"

【问题讨论】:

  • 仅凭提供的数据无法回答。
  • 正在保存的文件具有以下内容:for (;;);{"__ar":1,"error":1357001,"errorSummary":"Niet aangemeld","errorDescription": "Meld je aan om door te gaan。","payload":{"__dialog":{"title":{"__html":"Niet aangemeld"},"body":{"__html":"Meld je aan om门 te gaan."},"buttons":[{"name":"login","label":"Aanmelden","handler":"goURI(\"http:\\\/\\\/www. facebook.com\\\/login.php\", true);"}],"modal":true,"onloadRegister":["setInterval(function () {\n if (getCookie(\"c_user\") || getCookie(\"csm\")) {\n window.location.reload();\n }}, 5000);"]}},"js":["kQ5UI","PIiAz"]跨度>

标签: python web-crawler


【解决方案1】:

两种方法。

一种是使用 PhantomJs 之类的库在 webkit 中呈现页面的 DOM 树,并在执行评估之前滚动页面。

第二种方法是在后台Ajax调用中找出模式,调用实际的AJAX端点

【讨论】:

    【解决方案2】:

    首先,您遇到了引用问题。 URL 包含双引号,因此您需要使用反斜杠对其进行转义,或者使用单引号将 URL 括起来。

    wget --cookies=on --load-cookies=cookies.txt --keep-session-cookies --user-agent=Firefox \
        'https://www.somesite.com/ajax/pagelet/generic.php/pagination?data={"collection_token":"...","cursor":"...","tab_key":"....","profile_id":"...","overview":"...","ftid":"null","sk":"..."}&__user=...&__a=1'
    

    【讨论】:

    • 我尝试了两个反斜杠我得到错误 500 内部服务器错误
    【解决方案3】:

    使用 wget 时,您向页面发送 GET 请求,但 AJAX 使用 POST 请求。 当您使用 python 时,使用 urllib2 创建 POST 请求通常可以解决问题。如果您需要进一步的帮助,请告诉我。

    【讨论】:

    • AJAX 也可以做 GET 请求
    • 感谢您的快速响应,我也尝试了以下方法,但我收到“无法解码 JSON 对象:第 1 行第 0 列(字符 0)”响应。导入 simplejson 导入 urllib 导入 urllib2 参数 ={"collection_token":"...","cursor":"...","tab_key":"...","profile_id":"...","概述":"...","ftid":"...","sk":"..."} url = 'somesite.com/ajax/pagelet/generic.php/…' 数据 = urllib.urlencode(params) 响应 = urllib2.urlopen( url, 数据) json_response = simplejson.loads(response.read())
    猜你喜欢
    • 2012-09-13
    • 2013-11-11
    • 2021-11-01
    • 1970-01-01
    • 2020-05-30
    • 2021-07-23
    • 2021-01-21
    • 1970-01-01
    • 2015-05-06
    相关资源
    最近更新 更多