使用Curl绕过“免责声明页面”,然后进行网页抓取

时间:2012-04-18 15:52:35

标签: r redirect rcurl

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

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

之前有效,但最近几天没有长期工作。实际上我对它所做的代码不太了解,我想知道我是否必须在curlOptions中更改某些内容,或者重新编写整段代码?

感谢。

1 个答案:

答案 0 :(得分:1)

正如我在评论中提到的,问题的解决方案将完全取决于“免责声明页面”的实施。看起来前面的解决方案使用了更详细定义的here 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=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
  7. 您可以直接访问该网址,而无需亲自或通过cURL接受任何许可协议。

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