提问人:João Paiva 提问时间:11/12/2023 最后编辑:marguslJoão Paiva 更新时间:11/12/2023 访问量:35
需要使用 rvest 来抓取动态内容
Need to use rvest to scrap dynamic content
问:
我不得不从一个名为Unicorn Auctions的拍卖网站上删除数据。
当我尝试使用 rvest 执行此操作时,我能得到的只是拍卖标题和 URL,但我还需要它的开始和结束日期。当我尝试找到它的CSS类时,我找到的只是以下代码行:
我很害怕使用 RSelenium 抓取它,正如我在 Stack Overflow 中找到的那样。但我的老板希望它只是用 rvest 来制作的。他说这是可能的,但我找不到任何有用的 youtube 视频或文章。
我不希望任何人只是给我解决方案,我只是需要一些帮助!
答:
0赞
margusl
11/12/2023
#1
首先从页面源和/或 brwoser 开发工具中的网络响应中搜索其中一些值,例如“2023”将引导您找到正确的位置。
页面视图变量嵌入到其中一个元素中,如下所示<script>...</script>
<script type="text/javascript">
viewVars = {"escaper":{},...,"auctions": {"result_page":[{...,"time_start": "2023-11-06T01:00:00Z",...};
</script>
该 Javascript 表达式只是一个赋值,当从开头 () 和结尾 () 中删除几位时,生成的字符串可以解析为 JSON:viewVars = {
;
library(rvest)
library(stringr)
library(dplyr)
upcominng <-
read_html("https://bid.unicornauctions.com/") |>
html_element(xpath = "//script[contains(text(),'viewVars =')]") |>
html_text() |>
# remove few bits from javascript to to make parseble as JSON
str_remove("^\\s+viewVars =") |>
str_remove(";\\s+$") |>
jsonlite::fromJSON() |>
# extract results_page from the list
purrr::pluck("upcomingAuctions", "result_page") |>
as_tibble()
select(upcominng, title, contains("time")) |> glimpse()
#> Rows: 4
#> Columns: 9
#> $ title <chr> "November 'No Reserves' Unicorn Auction 2023"…
#> $ time_start <chr> "2023-11-06T01:00:00Z", "2023-11-13T01:00:00Z…
#> $ time_start_live_auction <lgl> NA, NA, NA, NA
#> $ time_start_proxy_bidding <lgl> NA, NA, NA, NA
#> $ timezone <chr> "America/Chicago", "America/Chicago", "Americ…
#> $ effective_end_time <chr> "2023-11-13T00:00:00Z", "2023-11-20T00:00:00Z…
#> $ extended_end_time <lgl> NA, NA, NA, NA
#> $ realtime_server_url <lgl> NA, NA, NA, NA
#> $ is_times_the_money <lgl> FALSE, FALSE, FALSE, FALSE
创建于 2023-11-12 with reprex v2.0.2
评论