我正在尝试从 IMDb 中获取一些电视收视率,但无法找到正确的 CSS 选择器。我尝试了数十种替代方法,并尝试使用 CSS 选择器小工具,但 R 返回了 {xml_nodeset (0)}
值。
这是我的代码:
require(rvest)
read_html('https://www.imdb.com/title/tt0562992/?ref_=ttep_ep1') %>%
html_nodes('a.ipc-button ipc-button--single-padding ipc-button--center-align-content ipc-button--default-height ipc-button--core-baseAlt ipc-button--theme-baseAlt ipc-button--on-textPrimary ipc-text-button RatingBarButtonBase__Button-sc-15v8ssr-2 jjcqHZ')
我想要做的是提取嵌入在页面左上角评级中的href。请参阅下图,其中我突出显示了我希望在开发人员视图 CSS 中提取的 href。
有人能帮我找出正确的选择器吗?
答案 0 :(得分:2)
不妨完成这组建议。
您无需担心动态类。使用多值类中的一个稳定类作为父级然后子级组合以获取子级 a
标记:
library(rvest)
library(magrittr)
url <- "https://www.imdb.com/title/tt0562992/?ref_=ttep_ep1"
link <- read_html(url) %>%
html_element(".rating-bar__base-button > a") %>%
html_attr("href") %>%
url_absolute(url)
或者,由于 IMDb 对这些事情有一致的方法,避免发出请求,只需对 url 的查询字符串部分进行替换。您可以将其封装到评分函数中。
url <- "https://www.imdb.com/title/tt0562992/?ref_=ttep_ep1"
link <- gsub("(\\?ref_=.*)", "ratings/?ref_=tt_ov_rt", url)
答案 1 :(得分:1)
我认为这个问题是因为一些类的末尾有 ID,比如 "jjcqHZ" ,"15v8ssr"。 许多前端框架每次刷新都会更改这些 ID。 尝试选择没有这些类的元素。
答案 2 :(得分:1)
答案 3 :(得分:1)
我实际上会使用 XPath,因为在这种情况下类非常动态且不太可靠。
<div>foobar</div>
function getElementByXpath(path) {
return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
}
console.log(getElementByXpath("//html[1]/body[1]/div[1]") );
答案 4 :(得分:1)
您可以使用 xpath -
library(rvest)
url <- 'https://www.imdb.com/title/tt0562992/?ref_=ttep_ep1'
url %>%
read_html() %>%
html_element(xpath = '//*[@aria-label="View User Ratings"]') %>%
#For older version of rvest use `html_node`
#html_node(xpath = '//*[@aria-label="View User Ratings"]') %>%
html_attr('href') %>%
paste0('https://www.imdb.com', .)
#[1] "https://www.imdb.com/title/tt0562992/ratings/?ref_=tt_ov_rt"