2

我试图抓取得分/事件时间以及球员姓名http://en.gooooal.com/soccer/analysis/8401/events_840182.html。但是无法正常工作。

require(RCurl);
require(XML);
lnk = "http://en.gooooal.com/soccer/analysis/8401/events_840182.html";
doc = htmlTreeParse(lnk,useInternalNodes=TRUE);
x = unlist(xpathApply(doc, "//table/tr/td"));

普通的 html 页面不显示表格内容的详细信息。节点只能从

>>> 打开 Chrome >>> 点击 F12 >>> 点击 Element

有人可以帮忙吗?非常感谢。

4

3 回答 3

2

如果您在 Chrome 开发人员工具处于活动状态时重新加载页面,您可以看到真实数据是通过 XHR 从http://en.gooooal.com/soccer/analysis/8401/goal_840182.js?GmFEjC8MND. 此 URL 包含840182您可以从页面中抓取的事件 ID。之后的部分? 似乎只是一种规避浏览器缓存的方法。8401,再次,似乎只是 id 的第一个数字。

因此,您可以加载原始页面,构建第二个 URL,并从那里获取真实数据。

无论如何...在大多数情况下,从网站上抓取数据是一种道德上有问题的做法。我希望你知道你在做什么:)

于 2013-09-22T19:29:07.850 回答
1

听起来好像内容是使用 javascript 异步插入的,因此使用 Curl 对您没有帮助。

您将需要一个可以实际解析和执行 javascript 的无头浏览器(如果您知道 ruby​​,您可以开始寻找 cucumber-selenium-chromedriver 组合),或者只是使用带有greasemonkey/tampermonkey 的浏览器来实际模仿真实的用户浏览分数刮。

于 2013-09-22T19:22:34.350 回答
1

加载(HTML)页面后,可能会生成内容(通过 Javascript,例如来自 ajax 调用)。您可以在禁用 Javascript 后通过在 Chrome 中加载页面来检查。

我不认为你可以指示 RCurl 执行 Javascript ......

于 2013-09-22T19:23:31.383 回答