【问题标题】:How to extract desired data from rvest::html_text如何从 rvest::html_text 中提取所需数据
【发布时间】:2019-12-08 23:22:00
【问题描述】:

我无法从网站中提取价格元素:

https://www.eventbrite.com/”使用 rvest

我使用 Select Gadget 找到了选择器,并有以下最小选择器“.eds-l-mar-top-1”,我用它来定位价格。我尝试将 xml 数据保存为数据框,但收到以下错误消息:

as.data.frame.default(page_html) 中的错误: 不能将类'c("xml_document", "xml_node")' 强制转换为data.frame

我已尝试使用以下内容过滤价格:

price <- page_html %>% html_nodes('js-display-price') %>% html_text()

但价格为空。

getYear = "2019"
getWeek = "31"

base_url = "https://www.eventbrite.com/"
query_params = list(yr=getYear, wk=getWeek)

resp <- GET(url=base_url, query=query_params)

page_html <- read_html(resp)

# price included in the details of the following tag
page_html %>% 
  html_nodes(".eds-l-mar-top-1") %>%
  html_text(trim = TRUE)

我想提取以下数据:

活动名称、日期和价格

【问题讨论】:

  • 例如,预期价格是多少? 305.00 美元?
  • 没关系:可以是300或者305

标签: web-scraping rvest


【解决方案1】:

我看到动态加载但在响应中其他地方的 javascript 对象中存在的内容。您可以正则表达式输出对象并使用 json 解析器进行处理。

library(httr)
library(rvest)
library(stringr)

getYear = "2019"
getWeek = "31"

base_url = "https://www.eventbrite.com/"
query_params = list(yr=getYear, wk=getWeek)

resp <- GET(url=base_url, query=query_params)

r <- read_html(resp) %>% 
  html_nodes('body') %>% 
  html_text() %>% 
  toString()

x <- str_match_all(r,'window\\.__SERVER_DATA__ = (.*);')  
json <- jsonlite::fromJSON(x[[1]][,2])
print(json$suggestions$events$ticket_availability)
print(json$suggestions$events)

【讨论】:

  • 谢谢你。 2个问题:1)正则表达式 (.*?);') 正在寻找 SERVER_DATA 中究竟是什么? 2) 你总是用 fromJSON 和 javascript 对象搜索第 1 列和第 2 列吗?
  • 它正在寻找作为服务器数据存储的 JavaScript 对象。当 JavaScript 在浏览器中运行并更新 DOM 时,它会从那里拉出来。正则表达式返回时使用的索引取决于您感兴趣的组。
  • 我的下一个问题是如何将 json 对象扁平化为数据帧。我尝试了各种方法,从:my_df % map(~ fromJSON(.x)) %>% bind_rows() 到stackoverflow.com/questions/11553592/…。似乎没有一个对我有用。任何建议
猜你喜欢
  • 2020-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-13
  • 1970-01-01
  • 2020-08-30
  • 1970-01-01
  • 2018-11-03
相关资源
最近更新 更多