【问题标题】:Why is html_nodes() in R not giving me the desired output for this webpage?为什么 R 中的 html_nodes() 没有给我这个网页所需的输出?
【发布时间】:2021-01-19 03:46:27
【问题描述】:

我希望提取此网页上每一集的所有链接,但是我似乎在使用 html_nodes() 之前遇到过这样的困难。我正在尝试使用“。”来迭代代码。这样页面的所有属性都是使用该 CSS 获得的。此代码旨在提供所有属性的输出,但我得到的是 {xml_nodeset (0)}。一旦我拥有了所有属性,我就知道该怎么做才能专门从中获取链接,但这一步是这个网站的绊脚石。

这是我在 R 中开始的代码:

episode_list_page_1 <- "https://jrelibrary.com/episode-list/"

episode_list_page_1 %>%
  read_html() %>%
  html_node("body") %>%
  html_nodes(".type-text svelte-fugjkr first-mobile first-desktop") %>%
  html_attrs()

【问题讨论】:

    标签: r web-scraping screen-scraping rvest


    【解决方案1】:

    此 rvest down 在这里不起作用,因为此页面使用 javascript 将另一个网页插入到此页面的 iframe 中,以显示信息。

    如果您搜索 imebedded 脚本,您会发现对此页面的引用:“https://datawrapper.dwcdn.net/eoqPA/66/”,它将重定向到“https://datawrapper.dwcdn.net/” eoqPA/67/"。第二页包含您正在寻找的嵌入式 JSON 数据,并通过 javascript 生成。

    节目的链接是可提取的,并且有一个指向完整索引的 Google 文档的链接。

    搜索此页面会找到指向 Google 文档的链接:

    library(rvest)
    library(dplyr)
    library(stringr)
    
    page2 <-read_html("https://datawrapper.dwcdn.net/eoqPA/67/")
    
    #find all of the links on the page:
    str_extract_all(html_text(page2), 'https:.*?\\"') 
    
    #isolate the Google docs
    print(str_extract_all(html_text(page2), 'https://docs.*?\\"') )
    #[[1]]
    #[1] "https://docs.google.com/spreadsheets/d/12iTobpwHViCIANFSX3Pc_dGMdfod-0w3I5P5QJL45L8/edit?usp=sharing"                                                
    #[2] "https://docs.google.com/spreadsheets/d/12iTobpwHViCIANFSX3Pc_dGMdfod-0w3I5P5QJL45L8/export?format=csv&id=12iTobpwHViCIANFSX3Pc_dGMdfod-0w3I5P5QJL45L8"
    

    【讨论】:

    • 现在这是我没想到的混乱程度。支持你解决这个问题!有什么办法让我编写代码吐出指向 google doc 的链接,然后使用上面的代码访问 doc 中的链接?
    • 是的,下载 Google 文档并将其保存为 CSV,然后您可以使用 R 读取文件并从第一列中提取链接。另一种可能性是使用这个str_extract_all(html_text(page2), 'https://jrelibrary.com/.*?/') 将提取链接并导航到页面。 (这两个列表最喜欢不完全对齐)这取决于您要完成的工作。
    • 这一切的目的是编写为多个文档抓取网页的代码。所以在这种情况下,我已经编写了代码,它将给我一个包含剧集 url、书名和作者在不同列中的 tibble。下一步是使用此处列出多个剧集的网页,并能够在每个剧集上迭代该函数。将文档下载到 csv 的问题,虽然它确实有效,但它破坏了自动化过程的目的,并且不会看到我正确完成任务。
    • 由于本网站严重依赖于javascript的使用,因此不容易被rvest刮掉。有一种可能的 RSelenium 方法。问题是与执行一些手动任务相比,编程需要多少时间和工作量。祝你作业顺利。
    猜你喜欢
    • 2022-11-27
    • 1970-01-01
    • 2021-10-30
    • 2021-04-06
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 2021-11-12
    • 2021-12-24
    相关资源
    最近更新 更多