【问题标题】:Use RCurl to bypass "disclaimer page" then do the web scraping使用 RCurl 绕过“免责声明页面”,然后进行网页抓取
【发布时间】:2023-03-31 11:18:01
【问题描述】:

我有一个类似this one 的链接,我想使用RCurl 从中提取数据,在此之前有一个免责声明页面,我需要在浏览器中单击它才能评估数据。以前我使用下面来自here 的脚本来“绕过”免责声明页面并使用RCurl 访问数据:

 pagesource <- getURL(url,.opts=curlOptions(followlocation=TRUE,cookiefile="nosuchfile"))
 doc <- htmlParse(pagesource)

以前可以,最近几天就不行了。其实我不太清楚它在做什么代码,我想知道我是否必须更改curlOptions中的某些内容,或者重新编写整段代码?

谢谢。

【问题讨论】:

  • 这是您尝试访问的实际站点吗?我认为解决方案在很大程度上取决于站点。
  • @Jeff 是的,这是我想要访问的页面之一

标签: r redirect rcurl


【解决方案1】:

正如我在评论中提到的,您的问题的解决方案将完全取决于“免责声明页面”的实施。看起来之前的解决方案使用了更详细定义的 cURL 选项here。基本上,它指示 cURL 做的是提供一个虚假的 cookie 文件(名为“nosuchfile”),然后按照您尝试访问的站点给出的标头重定向。显然,该网站的设置方式是,如果访问者声称没有正确的 cookie,那么它会立即将访问者重定向到免责声明页面。

您没有碰巧在您的工作目录中创建了一个名为“nosuchfile”的文件,对吧?如果没有,听起来目标站点改变了其免责声明页面的运行方式。如果是这种情况,除非我们拥有您尝试访问的实际页面以进行诊断,否则我们确实无法提供帮助。

在您在问题中引用的示例中,他们使用 Javascript 跳过免责声明,这可能很难通过。

但是,对于您提到的示例...

  1. 在 Chrome(或带有 Firebug 的 Firefox)中打开它
  2. 右键单击页面中的一些空白区域并选择“检查元素”
  3. 点击网络标签
  4. 如果那里有内容,请单击底部的“清除”按钮清空页面。
  5. 接受许可协议
  6. 监视通过网络的所有流量。就我而言,最重要的结果是有趣的结果。如果单击它,您可以预览它以验证它确实是一个 HTML 文档。如果您单击该项目下的“标题”选项卡,它将显示“请求 URL”。就我而言,那是:http://bank.hangseng.com/1/PA_1_1_P1/ComSvlet_MiniSite_eng_gif?app=eINVCFundPriceDividend&pri_fund_code=U42360&data_selection=0&keyword=U42360&start_day=30&start_month=03&start_year=2012&end_day=18&end_month=04&end_year=2012&data_selection2=0

您可以直接访问该 URL,而无需手动或从 cURL 接受任何许可协议。

请注意,如果您已经接受了协议,本网站会存储一个 cookie,说明需要删除该 cookie 才能返回许可协议页面。您可以通过单击“资源”选项卡,然后转到“Cookie”并删除每一个,然后刷新您在上面发布的 URL 来执行此操作。

【讨论】:

    猜你喜欢
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    • 2021-11-02
    • 1970-01-01
    相关资源
    最近更新 更多