当前位置: 首页 > 知识库问答 >
问题:

webscraping表时出现{xml_nodeset(0)}问题

吴刚毅
2023-03-14

我正试图从这个URL中刮取第一个表:

url <- "https://www.whoscored.com/Matches/318578/LiveStatistics/England-Premier-League-2009-2010-Blackburn-Arsenal"
data <- url %>%
  read_html() %>%
  html_nodes(xpath='//*[@id="top-player-stats-summary-grid"]')
url <- "https://www.whoscored.com/Matches/318578/LiveStatistics/England-Premier-League-2009-2010-Blackburn-Arsenal"
data <- url %>%
  read_html() %>%
  html_nodes(css='.grid')

显然,这可能是javascript的问题--有没有快速提取相关数据的方法?检查表条目似乎显示数据不是从其他地方导入的,而是编码到页面中的,所以我似乎应该能够从源代码中提取数据(对不起,我完全不知道HTML和JS是如何工作的,所以我的问题可能没有意义)。

共有1个答案

傅阳炎
2023-03-14

当使用浏览器时,页面通过运行在页面上的javascript动态更新内容。这不会发生在RVEST身上。但是,您可以在dev tools network选项卡中观察到xhr调用,该调用以json形式返回该内容

require(httr)
require(jsonlite)

headers = c('user-agent' = 'Mozilla/5.0',
            'accept' = 'application/json, text/javascript, */*; q=0.01',
           'referer' = 'https://www.whoscored.com/Matches/318578/LiveStatistics/England-Premier-League-2009-2010-Blackburn-Arsenal',
            'authority' = 'www.whoscored.com',
            'x-requested-with' = 'XMLHttpRequest')

params = list(
  'category' = 'summary',
  'subcategory' = 'all',
  'statsAccumulationType' = '0',
  'isCurrent' = 'true',
  'playerId' = '',
  'teamIds' = '158',
  'matchId' = '318578',
  'stageId' = '',
  'tournamentOptions' = '',
  'sortBy' = '',
  'sortAscending' = '',
  'age' = '',
  'ageComparisonType' = '',
  'appearances' = '',
  'appearancesComparisonType' = '',
  'field' = '',
  'nationality' = '',
  'positionOptions' = '',
  'timeOfTheGameEnd' = '',
  'timeOfTheGameStart' = '',
  'isMinApp' = '',
  'page' = '',
  'includeZeroValues' = '',
  'numberOfPlayersToPick' = ''
)

r <- httr::GET(url = 'https://www.whoscored.com/StatisticsFeed/1/GetMatchCentrePlayerStatistics', httr::add_headers(.headers=headers), query = params)

data <- jsonlite::fromJSON(content(r,as="text") )
print(data$playerTableStats)

通过视图(data$playertablestats)获取data$playertablestats的少量内容。您将根据需要以所需格式解析所需信息。

 类似资料:
  • 我有一个表,我想用另一个表中的值更新该表,我正在使用以下代码: 尽管事实上,表。id是tableA的主键,我不断得到以下错误: 错误代码:1175。您使用的是安全更新模式,并且您试图更新一个没有使用键列禁用安全模式的表,请在“首选项”中切换该选项- 我做错了什么?

  • 问题内容: 现有2个版本的java系统,1.6版本无法卸载(dll无法运行) 求大神拯救!小白一枚想学习安卓系统 问题答案: 把你想用的那个版本设置环境变量,设置JAVA_HOME=”你安装的JDK路径”

  • 我一直在努力尝试,但我无法克服这个错误。我有Ruby版本1.8.7和Gem版本2.1.11,我试图安装open project,但我总是遇到这个错误 安装json(1.8.1)gem::installer::extensionbuilderror:错误:未能构建gem本机扩展。 迈克 安装json(1.8.1)时出错,Bundler无法继续。在绑定之前,请确保成功。==>出错:(==>安装中止。

  • 我有一个数十万对象的列表。当每一个运行时,它都会根据给定的值执行一个可能很长的计算。正因为如此,我希望异步运行每个任务(最好是通过使用某种执行器),并在30秒后检索每次计算的结果,取消那些没有及时完成的结果。(所得值在其他地方使用。) 到目前为止,我就是这样实现它的: ArrayList存储每个要执行的,然后将其发送到ExecutorService以运行所有任务。我遇到的问题是,任务似乎是同步启动

  • 问题内容: 由于某些原因,当我使用正确的登录信息时,此代码将不允许我进入网站。该帖子登录页面的代码,说明我的代码没有工作。有人可以告诉我我忘记了什么或出了什么问题吗? 问题答案: 除了,并且,该网站requeires为登录两个额外的价值- 和。 您可以从第一个请求的响应中获取它们,如下所示- 并将其添加到(顺序并不重要)之后- 我还将字段添加到两个请求中- 一些站点对其进行测试并将不同的页面发送到

  • 我真的很难修复我的代码。我已经创建了一个双链接列表,我正试图反向遍历它。 有什么想法吗? 这是我的代码:Node。爪哇: 下面是第二个类“DNode.java”: 最后,这里是双链接列表。java:(重写另一个类“链表”中的“添加”和“删除”方法) 公共类双链接列表扩展了链接列表{ 我可以向前打印列表,但向后打印时会遇到无限循环。有什么想法吗? 谢谢