我的问题是,每次我抓取给定静态站点的不同部分时,如果我不知道确切的页码,我必须手动更改"Pages_to_sccrap"整数向量.所以,我想把这个自动化.换句话说,当我事先不知道页码时,我希望能够刮掉所有可用的页面.

library(rvest)

base_url <- "https://morskidar.bg/products.php?category=pryasna-riba&page=%d"
scrape_prices <- function(page) {
  url <- sprintf(base_url, page)
  page_content <- read_html(url)
  pc <- page_content %>% 
    html_elements(".col-sm-6") %>%
    map_dfr(~ tibble(
      product = .x %>% 
        html_element(".shop-three-products-name a") %>% 
        html_text2(), 
      price = .x %>% 
        html_element(".shop-three-products-price") %>% 
        html_text2(),
      )) %>% 
    mutate(date = Sys.Date(),
               location = "Unknown",
               type = "Unknown",
               source = "Unknown", .before = product) %>% 
    separate_wider_delim(price, delim = " - ", names = c("unit", "price")) %>% 
    mutate(price = parse_number(price), unit = str_remove(unit, "\\.")) %>% 
    distinct()
  return(pc)
  }
pages_to_scrape <- 1:5
final_df <- map_dfr(pages_to_scrape, scrape_prices)

推荐答案

因为分页链接/页码包含在同一个html文档中:

<ul class="pagination">
  <li class="active"><a href="/products.php?category=pryasna-riba&amp;page=1" title="Pagination">1</a></li>
  <li><a href="/products.php?category=pryasna-riba&amp;page=2" title="Pagination">2</a></li>
  <li><a href="/products.php?category=pryasna-riba&amp;page=3" title="Pagination">3</a></li>
  <li><a href="/products.php?category=pryasna-riba&amp;page=4" title="Pagination">4</a></li>
  <li><a href="/products.php?category=pryasna-riba&amp;page=5" title="Pagination">5</a></li>
</ul>

,您可以首先为您的pages_to_scrape向量设置扫描值:

library(rvest)
base_url <- "https://morskidar.bg/products.php?category=pryasna-riba&page=%d"
pages_to_scrape <- 
  sprintf(base_url, 1) |>
  read_html() |>
  html_elements("ul.pagination li") |> 
  html_text() |>
  as.integer()

pages_to_scrape
#> [1] 1 2 3 4 5

创建于2024-01-04年第reprex v2.0.2

R相关问答推荐

将Multilinetring合并到一个线串中,使用sf生成规则间隔的点

卸载安装了BRM的模型发出的警告

ggplot 2中的地块底图(basemaps_gglayer()不起作用)

如何自定义Shapviz图?

有没有一个R函数允许你从一个数字变量中提取一个数字,而不考虑它的位置(不仅仅是第一个或最后一个数字?

为什么在ggplot2中添加geom_text这么慢?

如何根据R中其他列的值有条件地从列中提取数据?

我如何才能找到FAMILY=POISSON(LINK=&Q;LOG&Q;)中的模型预测指定值的日期?

如何使用ggplot对堆叠条形图进行嵌套排序?

如何同时从多个列表中获取名字?

将数据集旋转到长格式,用于遵循特定名称模式的所有变量对

观察器中的inaliateLater的位置

随机将数据帧中特定列上的某些行设置为NA

如何移动点以使它们的打印不重叠

为什么不能使用lApply在包装函数中调用子集

如果满足条件,则替换列的前一个值和后续值

将Geojson保存为R中的shapefile

如何将两个用不同的运算符替换*的矩阵相乘

如何根据每个子框架中分类因子的唯一计数来过滤子框架列表?

向数据添加标签