找不到用于网页抓取的正确 CSS 选择器

时间:2021-07-17 10:32:14

标签: html r web-scraping css-selectors rvest

我正在尝试从 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。

有人能帮我找出正确的选择器吗?

enter image description here

5 个答案:

答案 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]") );

Here is an example of comparisons between CSS vs Xpaths

答案 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"