【问题标题】:Scraping URLS of several pages from one website从一个网站抓取多个页面的 URL
【发布时间】:2021-07-02 13:59:50
【问题描述】:

我很确定.. 在社区的某个地方,这个问题已经得到解答。但由于某些原因,我找不到我想要的答案。 我最近才开始在 R 中进行文本挖掘和网页抓取。 而且我很难理解 html 代码(之前也没有使用过 html),我可以从一个网站/页面上抓取我想要的所有信息。 但我希望我能为这个网站的所有“下一页”做到这一点。 我编写了一个替代方案,但使用起来不太方便。

# I know the website has 9902 items and 50 items per page:
i <- 1
info <- c()
while (i < 9902) { 
  print(i)
  i = i+50 
  info <- c(info,i)
}

URL_OG <- "https://www.imdb.com/search/title/?title_type=feature&year=2020-01-01,2020-12-31&start="
URL_OG_end <- "&ref_=adv_nxt"

create_URL <- function(x) {
paste0(URL_OG,x,URL_OG_end)
}
URLS <- unlist(lapply(info,create_URL))
# Now I have a list of URLS. But this is a stupid solution...

我可以使用 html_nodes(text,css='.next-page') 什么的吗? 非常感谢

【问题讨论】:

    标签: r url web-scraping


    【解决方案1】:

    您的解决方案一点也不愚蠢,如果它对您有用(因为它可以为您提供所需的数据),那么这就是您所需要的。创建所需 url 列表然后解析它们以获取数据甚至是常见的。

    也就是说,正如您所提到的,您也可以使用 html_nodeshtml_node,如果您知道自己在寻找什么,这是一种方法:

    library(rvest)
    base_url = "https://www.imdb.com"
    
    ## first page
    page_url <- "/search/title/?title_type=feature&year=2020-01-01,2020-12-31"
    # read page
    page <- read_html(paste0(base_url, page_url))
    # get movie titles
    movie_titles <- page %>% html_nodes(".lister-item-header") %>% html_node("a") %>% html_text()
    print(length(movie_titles))
    # get the node for the next page
    next_node <- page %>% html_node(".next-page")
    
    ## while there's a next page repeate the above steps
    while (!is.na(next_node)) {
      # get next page url
      page_url <- next_node %>% html_attr("href")
      # read page
      page <- read_html(paste0(base_url, page_url))
      # get movie titles
      movie_titles <- page %>% html_nodes(".lister-item-header") %>% html_node("a") %>% html_text()
      print(length(movie_titles))
      # get the node for the next page
      next_node <- page %>% html_node(".next-page")
      # print(next_node)
    }
    

    【讨论】:

    • 但是这样,我无法创建所有 URL 的列表,对吧?
    • 在这种情况下你不需要。但是当然,如​​果您需要其他内容的网址,您可以在阅读页面之前随时保存网址,例如,urls &lt;- c(urls, paste0(base_url, page_url))
    猜你喜欢
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    相关资源
    最近更新 更多