1

我有一个像这样的链接,我想从中提取数据RCurl,在此之前有一个免责声明页面,我需要在浏览器中单击它才能评估数据。以前我使用下面的脚本(来自这里)来“绕过”免责声明页面并使用以下方式访问数据RCurl

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

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

谢谢。

4

1 回答 1

1

正如我在评论中提到的,您的问题的解决方案将完全取决于“免责声明页面”的实施。看起来以前的解决方案使用了此处更详细定义的 cURL 选项。基本上,它指示 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=eINV​​CFundPriceDividend&pri_fund_code=U42360&data_selection=0&keyword=U42360&start_day=30&start_month=03&start_year=2012_&end_day=18&end_month=04&122=0dataselection=02

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

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

于 2012-04-18T16:43:10.817 回答