【问题标题】:Getting the right tag for web scraping using rvest使用 rvest 获取正确的网页抓取标签
【发布时间】:2021-03-06 10:43:36
【问题描述】:

我在找到正确的标签以从网页中抓取我想要的文本时遇到了一些麻烦。下面是 HTML 示例。我想刮掉文字“墨尔本风暴已经完成了 4 次尝试布里斯班野马队已经完成了 2 次尝试”

我一直在使用的 R 代码如下,但我似乎无法得到我想要的文本。

url <- 'https://www.nrl.com/draw/nrl-premiership/2019/round-1/storm-v-broncos/'
RawTable <- read_html(url)
RawTable <- html_nodes(RawTable,'.u-visually-hidden')
RawTable <- html_text(RawTable)
RawTable <- data.frame(RawTable)

HTML 代码:

`<div class="Match-centre-summary o-shadowed-box u-spacing-mb-small">
      <span class="u-visually-hidden">Melbourne Storm has achieved 4 Tries Brisbane Broncos has achieved 2 
       Tries </span>`

【问题讨论】:

    标签: html css r web-scraping rvest


    【解决方案1】:

    诸如此类的网页通常需要一些特殊技巧,例如 Rselenium。查看此网页,您请求的数据似乎以 JSON 数据的形式存储在一个属性中,然后由浏览器呈现。

    在这种情况下,可以使用 rvest 检索属性的数据,然后将 JSON 数据转换为列表和/或数据框。

    library(rvest)
    library(dplyr)
    library(jsonlite)
    
    url <- 'https://www.nrl.com/draw/nrl-premiership/2019/round-1/storm-v-broncos/'
    page <- read_html(url)
    
    contentnodes <-page %>% html_nodes ("div.l-content.pre-quench") %>% 
       html_attr("q-data") %>% jsonlite::fromJSON()
    

    我们正在寻找具有“class= l-content pre-quench”的 div 节点。在该节点中有一个名为“q-data”的属性。我们要检索的是该属性的数据。 fromJSON() 正在将属性的 JSON 数据转换为一个包含许多嵌套列表和数据框的列表,其中包含与匹配项相关的所有信息。
    您需要根据所需信息制定结构。

    【讨论】:

      【解决方案2】:

      我认为您正在下载的页面没有该文本。

      我认为正在进行某种重定向。

      如果你这样做:

      write_html( read_html(url), "temp.html")
      

      然后在你的浏览器中打开temp.html就是你想要的文本源?

      【讨论】:

      • 呃。我喜欢挑战!但是这个看起来很难!看起来内容实际上是通过脚本呈现的。这篇文章:datacamp.com/community/tutorials/… 可能是一个解决方案。确实存在其他渲染解决方案。哪个是正确的取决于我怀疑您使用的平台。
      猜你喜欢
      • 2020-07-18
      • 2019-02-17
      • 2020-01-10
      • 1970-01-01
      • 1970-01-01
      • 2020-08-21
      • 2019-10-11
      • 1970-01-01
      相关资源
      最近更新 更多