提问人:James Rider 提问时间:7/25/2023 更新时间:7/25/2023 访问量:53
Web 抓取 R 中的超链接文本?
Web scrape hyperlinked text in R?
问:
https://www.nber.org/papers?page=1&perPage=50&sortBy=public_date
以上网页由一系列学术论文组成。这些论文的标题(例如,分组异质性下的稀疏建模及其在资产定价中的应用)被超链接到有更多细节的页面;因此,如果您单击这些标题(超链接文本),它会将您引导至具有更多详细信息的页面。
有没有办法在 R 中抓取所有这些链接?我想要所有附在学术论文标题上的链接,而不是与人名等其他内容相关的超链接。我不想要标题本身,只想要它们所附加的链接。
答:
3赞
Allan Cameron
7/25/2023
#1
摘要和链接使用 xhr 调用动态加载到页面上,该调用获取 JSON 文件以填充 html。如果你想快速高效地获取链接,可以直接下载json并解析。您将使用浏览器的控制台找到 json URL。
下面是一个完整的reprex:
urls <- "https://www.nber.org/api/v1/working_page_listing/contentType/" |>
paste0("working_paper/_/_/search?page=1&perPage=50&sortBy=public_date") |>
httr::GET() |>
httr::content("parsed") |>
getElement("results") |>
sapply(function(x) x$url)
如果您想要完整的网址,而不是相对的网址,只需将域粘贴在前面即可。
paste0("https://www.nber.org", urls)
#> [1] "https://www.nber.org/papers/w31388" "https://www.nber.org/papers/w31424"
#> [3] "https://www.nber.org/papers/w31482" "https://www.nber.org/papers/w31477"
#> [5] "https://www.nber.org/papers/w31478" "https://www.nber.org/papers/w31479"
#> [7] "https://www.nber.org/papers/w31480" "https://www.nber.org/papers/w31481"
#> [9] "https://www.nber.org/papers/w31490" "https://www.nber.org/papers/w31502"
#> [11] "https://www.nber.org/papers/w31486" "https://www.nber.org/papers/w31483"
#> [13] "https://www.nber.org/papers/w31484" "https://www.nber.org/papers/w31485"
#> [15] "https://www.nber.org/papers/w31494" "https://www.nber.org/papers/w31489"
#> [17] "https://www.nber.org/papers/w31496" "https://www.nber.org/papers/w31491"
#> [19] "https://www.nber.org/papers/w31493" "https://www.nber.org/papers/w31488"
#> [21] "https://www.nber.org/papers/w31495" "https://www.nber.org/papers/w31497"
#> [23] "https://www.nber.org/papers/w31498" "https://www.nber.org/papers/w31499"
#> [25] "https://www.nber.org/papers/w31500" "https://www.nber.org/papers/w31501"
#> [27] "https://www.nber.org/papers/w31487" "https://www.nber.org/papers/w31503"
#> [29] "https://www.nber.org/papers/w31476" "https://www.nber.org/papers/w31492"
#> [31] "https://www.nber.org/papers/w31450" "https://www.nber.org/papers/w31449"
#> [33] "https://www.nber.org/papers/w31448" "https://www.nber.org/papers/w31453"
#> [35] "https://www.nber.org/papers/w31451" "https://www.nber.org/papers/w31452"
#> [37] "https://www.nber.org/papers/w31454" "https://www.nber.org/papers/w31455"
#> [39] "https://www.nber.org/papers/w31465" "https://www.nber.org/papers/w31458"
#> [41] "https://www.nber.org/papers/w31459" "https://www.nber.org/papers/w31460"
#> [43] "https://www.nber.org/papers/w31461" "https://www.nber.org/papers/w31472"
#> [45] "https://www.nber.org/papers/w31473" "https://www.nber.org/papers/w31475"
#> [47] "https://www.nber.org/papers/w31474" "https://www.nber.org/papers/w31470"
#> [49] "https://www.nber.org/papers/w31462" "https://www.nber.org/papers/w31471"
这些都是指向第一页上文章的完整链接。它们不是按照它们在页面上出现的顺序排列的;我不确定这些是否只是随机的。
创建于 2023-07-24 with reprex v2.0.2
评论
0赞
James Rider
7/27/2023
你能解释一下你的第一个代码块中发生了什么吗?我有点困惑,尤其是与 url 相关的前两行代码中发生了什么?
0赞
Allan Cameron
7/27/2023
这只是一个长网址。我已将其一分为二以使用粘贴将其放入代码块中,但您不需要这样做。然后我们获取该 url,解析其内容,提取“results”元素(为什么我在检查对象时发现 url 所在的位置),最后一次获取所有 url 元素sapply
评论