【发布时间】:2021-07-24 18:09:56
【问题描述】:
我有一个可以抓取网页及其初始嵌套链接的工作代码,但我想单击第二级以抓取更多内容,因此我根据第一级的成功编写了我认为正确的方法。我没有得到任何值,只有标题存在。对此我将不胜感激。
library(rvest)
library(dplyr)
library(purrr)
link = "http://ufcstats.com/statistics/events/completed?page=all"
page = read_html(link)
name = page %>% html_nodes(".b-link_style_black") %>% html_text()
name_links <- page %>% html_nodes(".b-link_style_black") %>% html_attr("href")
fight_info = function(name_link) {
fight_page = read_html(name_link)
tibble(
date = fight %>% html_nodes(".b-list__box-list-item:nth-child(1)") %>% html_text(),
fight_event = fight %>% html_nodes(".b-list__box-list-item:nth-child(1)") %>% html_attr("href"),
Fighter1 = fight_page %>% html_nodes(".b-fight-details__person-status_style_green+ .b-fight-details__person-text .b-fight-details__person-link") %>% html_text(),
Fighter2 = fight_page %>% html_nodes(".b-fight-details__person-status_style_gray+ .b-fight-details__person-text .b-fight-details__person-link") %>% html_text(),
Referee = fight_page %>% html_nodes(".b-fight-details__label+ span") %>% html_text(),
F1Control = fight_page %>% html_nodes(".b-fight-details__table-col:nth-child(10) .b-fight-details__table-text:nth-child(1)") %>% html_text(),
F2Control = fight_page %>% html_nodes(".b-fight-details__table-col:nth-child(10) .b-fight-details__table-text+ .b-fight-details__table-text") %>% html_text(),
F1ControlRD = fight_page %>% html_nodes(".b-fight-details__table-col:nth-child(10) .b-fight-details__table-text:nth-child(1)") %>% html_text(),
F2ControlRD = fight_page %>% html_nodes(".b-fight-details__table-col:nth-child(10) .b-fight-details__table-text+ .b-fight-details__table-text") %>% html_text(),
Weightclass = fight_page %>% html_nodes(".b-fight-details__fight-title") %>% html_text()
) -> t
return(t)
}
df <- map_dfr(name_links, fight_info)
【问题讨论】:
-
你在
map_dfr中调用get_decisions,但你的函数被调用fight_info? -
我刚刚修复了它,但收到了另一个错误,“UseMethod("xml_find_all") 中的错误:没有适用于 'xml_find_all' 的方法应用于“字符”类的对象调用:xml2:: xml_find_all(x, make_selector(css, xpath))"
-
...
fight应该是fight_page? -
嗯,我很感激。进行了更改,但随后收到了此错误,我不确定如何处理。 “错误:Tibble 列必须具有兼容的大小。* 大小 0:现有数据。* 大小 10:列
F1Control。ℹ 仅回收大小为 1 的值。运行rlang::last_error()以查看错误发生的位置。调用自:signal_abort (cnd)"
标签: r dataframe web-scraping