使用R从Java生成的网页中截取数据

时间:2013-11-01 07:36:30

标签: java r web-scraping

荷兰政府公布其在网站上提供的补贴:

http://www.hetlnvloket.nl/databank-eu-subsidiegegevens-2012#

然而,从网站获取数据并不简单。如果你去网站,请选择' Gemeenschappelijk Landbouw Beleid' (共同农业政策,欧盟补贴计划)和新闻动态' (zoek表示'搜索')在页面底部,您可以从100个条目中获得一个表格。但是我无法将其录入R.看来该页面是在您按下' zoek'后用JavaScript生成的。

我的问题是:

  1. 如何从网站上删除此内容?

  2. 我如何获得其他900页(总共有90K记录)

  3. 我要求政府在XLS中向我提供这些数据,但由于隐私原因,他们不会这样做。'但这样一来,没人能检查。我不喜欢那样。 ; - )

2 个答案:

答案 0 :(得分:2)

如果您没有看到网址更改,请求通常是通过ajax或通过对同一页面的请求后完成的。在这种情况下,它是通过ajax POST请求到某个带有一些参数的页面完成的。要查找哪些页面加载了哪些参数,请打开开发人员控制台。您可以通过右键单击大多数浏览器并单击“检查元素”或按 F12 来执行此操作。转到网络选项卡,然后单击搜索按钮。您将在弹出的网络选项卡中看到一个请求。检查此请求。您会注意到这是对/pls/feed/glb2012的请求。您也可以在那里找到请求参数。

关于如何刮掉这个问题。使用编程语言和您最喜欢的抓取库。建议库不在StackOverflow的范围内。

答案 1 :(得分:0)

使用比R更适合刮擦的工具。例如,python中的Scrapy或BeautifulSoup,perl中的Mojolicious或Web :: Scraper,...你想用刮擦工具刮掉,输出csv中的数据(或者其他东西)类似的标准),然后把它带到R。

您需要弄清楚浏览器 - 服务器通信的确切内容。当您转到该页面时,数据可能不是 at 您看到的网址。在Wireshark中快速捕获并查看HTTP请求将显示。

看起来,根据您的经验水平(并且可能不想仅为此学习新工具),您可能希望有人为您做这件事。发布它,确保谁做了它做了一堆刮削项目,最多只需要几个小时。

如果您确实想这样做,请按照抓取教程和食谱示例进行操作,但请记住在执行此操作时检查Wireshark中的实际通信。