【问题标题】:WebScraping in R: extract names from `href` tagsR中的网页抓取:从`href`标签中提取名称
【发布时间】:2019-09-12 15:12:49
【问题描述】:

这是我的代码:

library(rvest)
library(XML)
library(xml2)
url_imb <- 'https://www.imdb.com/search/title/?count=100&release_date=2016,2016&title_type=feature'
web_page<-read_html(url_imb)

我想提取与adv_li_dr_0tags 相关的所有董事姓名。

这就是我所做的: CSS 选择器:

directors_0<-html_text(html_nodes(web_page,"p a"))

XPATH 选择器:

directors_0<-html_attr(html_nodes(web_page,xpath='//p[@class=""]//a'),"href")

当然是不完整的。但是你能帮帮我吗?如何提取与href中的标签相关的元素。

【问题讨论】:

  • 这就是你所追求的吗? web_page %&gt;% html_nodes(".text-muted+ p a:nth-child(1)") %&gt;% html_text() ?
  • @JasonAizkalns 是的。你能提供 XPATH 吗?

标签: r web-scraping


【解决方案1】:

这是你想要的吗?

library(rvest)
library(XML)
library(xml2)
url_imb <- 'https://www.imdb.com/search/title/?count=100&release_date=2016,2016&title_type=feature'
directors <- read_html(url_imb) %>% 
  html_nodes(xpath = "//p[contains(text(),'Director')]/a[contains(@href, '_dr')]") %>% 
  html_text()

【讨论】:

  • 还没有。如您所见,它不会返回导演。它返回标签:adv_li_dr_0adv_li_st_X。它也返回了演员。我只想要来自adv_li_dr_0tag 的董事
  • 这就是我对您的代码所做的:html_text(html_nodes(web_page,xpath = "//p[contains(text(),'Director')]") )。我只是删除了/a。并手动分隔董事姓名。它应该有一个聪明的方法来直接做到这一点。
  • 非常感谢!我必须学习如何使用contains 参数。请您提供任何参考以了解如何使用contains??
  • 现在不要看具体的教程,但是你可以找到很多关于 xpath 和“包含”的问题。
【解决方案2】:

我会考虑使用带有 contains 运算符的 css attribute = value 选择器来指定 href 属性必须包含子字符串 adv_li_dr_ 。请注意,假设您想要所有董事,我已经删除了 0。如果您只想要每部电影的第一位导演,请在最后输入 0。请注意,这应该比 xpath 更快且不那么脆弱。

library(rvest)
library(magrittr)

url_imb <- 'https://www.imdb.com/search/title/?count=100&release_date=2016,2016&title_type=feature'
directors <-read_html(url_imb) %>% html_nodes('[href*=adv_li_dr_]')%>%html_text()

阅读:

  1. Attribute selectors

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-13
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 2013-07-15
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    相关资源
    最近更新 更多