Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- library(assertthat)
- library(tidyverse)
- library(xml2)
- library(rlang)
- library(parallel)
- extract.ram <- function(link) {
- doc <- read_html(url(link))
- el <- xml_find_first(doc, ".//tr[contains(., 'Size')]")
- xml_text(xml_children(el)[[2]])
- }
- extract.row <- function(row) {
- col <- xml_find_first(row, ".//div[contains(@class, 'col-12 col-lg-4')]")
- assert_that(xml_text(xml_children(col)[[1]]) == "\nSystem\n")
- system <- str_squish(xml_text(xml_children(col)[[2]]))
- url <- xml_attr(xml_children(col)[[2]], "href")
- #RAM <- extract.ram(paste0("https://browser.geekbench.com", url))
- description <- str_squish(xml_text(xml_children(col)[[3]]))
- cols <- xml_find_all(row, ".//div[contains(@class, 'col-6 col-md-3 col-lg-2')]")
- bind_cols(
- data.frame(System = system, Description = description, stringsAsFactors=FALSE),
- map(1:length(cols), ~ {
- title <- str_squish(xml_text(xml_find_first(cols[[.]], ".//span[contains(@class, 'list-col-subtitle')]")))
- text <- str_squish(xml_text(xml_find_first(cols[[.]], ".//span[contains(@class, 'list-col-text')]")))
- X <- data.frame(text, stringsAsFactors = FALSE)
- names(X) <- title
- X
- }) %>% bind_cols()
- )
- }
- extract.page <- function(page, query) {
- doc <- read_html(url(glue::glue("https://browser.geekbench.com/v5/cpu/search?page={page}&q={query}")))
- rows <- xml_find_all(doc, ".//div[contains(@class, 'list-col-inner')]")
- map(1:length(rows), ~ extract.row(rows[[.]])) %>% bind_rows()
- }
- grab.data <- function(query) {
- geekbench.url <- glue::glue("https://browser.geekbench.com/v5/cpu/search?&q={query}")
- # get number of pages
- doc <- read_html(url(geekbench.url))
- page.count <-
- map_chr(xml_find_all(doc, ".//a[contains(@class, 'page-link')]"), xml_text) %>%
- { suppressWarnings(as.numeric(.)) } %>%
- na.omit() %>%
- max(., 1)
- #page.count <- min(page.count, 2)
- #
- # print(page.count)
- #page.count <- min(page.count, 16)
- # grab all pages
- mclapply(1:page.count, function(page) {
- cat(glue::glue("Getting page {page} out of {page.count}..."), "\n")
- while(TRUE) {
- result <- try(extract.page(page, query))
- if(is.data.frame(result)) return(result)
- cat(glue::glue("Retrying page {page} out of {page.count}..."), "\n")
- }
- }) %>%
- bind_rows() %>%
- as_tibble()
- }
- options(mc.cores = 5)
- data <- bind_rows(
- grab.data("4800U") %>% mutate(CPU = "Ryzen 4800U"),
- grab.data("MacBookAir10,1") %>% mutate(CPU = "Apple M1 (MacBook Air)"),
- grab.data("1165G7") %>% mutate(CPU = "Intel i7-1165G7")
- ) %>%
- as_tibble %>%
- mutate(
- `Single-Core Score` = as.integer(`Single-Core Score`),
- `Multi-Core Score` = as.integer(`Multi-Core Score`)
- )
- saveRDS(data, "geekbench-data.rds")
- write_csv(data, "gb5-m1-4800U-1165G7.csv")
- p_single <- ggplot(data) + geom_density(aes(`Single-Core Score`, color = CPU))
- p_multi <- ggplot(data) + geom_density(aes(`Multi-Core Score`, color = CPU))
- ggsave("gb5_m1_single.jpg", p_single)
- ggsave("gb5_m1_multi.jpg", p_multi)
Advertisement
Add Comment
Please, Sign In to add comment