房地产网络抓取 [r]

Web scraping of real estates [r]

我想自动收集房地产广告网站上的特定数据。我使用包 tidyversejsonlite 作为起点。使用这些我可以在一定程度上收集我感兴趣的东西。

让我们使用这个庄园网页:https://www.sreality.cz/hledani/prodej/byty

# Libraries -----------------------------------------------------------------------------------
library(jsonlite)
library(tidyverse)

# Web Page of Estates: https://www.sreality.cz/hledani/prodej/byty/praha

# Select one region
id = 10

A = paste0("https://www.sreality.cz/api/cs/v2/estates?category_main_cb=1&category_type_cb=1&locality_region_id=", id, "&page=")
B= paste("&per_page=40&tms=1583500044717")
C = paste0(A,1,B)
D = fromJSON(C)


Res <- 
  D$`_embedded`$estates %>% 
  mutate(D$`_embedded`$estates$hash_id) %>% 
  as_data_frame()

Res %>% view()

这样 Res 对象包含感兴趣的基本信息,例如价格,也可以使用正则表达式我们可以获得房间数量等。但是,有一些我感兴趣的信息丢失,例如 楼层数 (Podlaží), 所有权类型 (Vlastnictví)和其他人。

让我们在一个特定的庄园掠夺

Res$hash_id[1]

将 return 房地产 ID 编号,然后我们可以 google 使用该 ID 进行此优惠。

我们将找到以下页面:

https://www.sreality.cz/detail/prodej/byt/2+kk/praha-praha-4-milevska/822296156#img=0&fullscreen=false

在这里我们可以看到有关 Floor (Podlaží:5.podlaží) 的信息正在处理中。 但是,在 D 对象中,没有关于 Floor (podlaží) 的信息,也没有关于 'Vlastnictví' 的信息。 我希望能够收集有关所有庄园的信息。 有什么方法可以在 R 中做到这一点?

您需要额外 API 次调用才能获取所需数据。每个 hash_id 的新 URL 是

https://www.sreality.cz/api/cs/v2/estates/<hash_id>?tms=<timestamp>

考虑这个工作流程

mas_url <- "https://www.sreality.cz"

get_links <- function(url, id, page) {
  tmp <- paste0(
    url, 
    "/api/cs/v2/estates?category_main_cb=1&category_type_cb=1&locality_region_id=", id, 
    "&page=", page, 
    "&per_page=40&tms=1583500044717"
  )
  links <- jsonlite::fromJSON(tmp)$`_embedded`$estates$hash_id
  tms <- as.character(round(as.double(Sys.time())*1000))
  paste0(url, "/api/cs/v2/estates/", links, "?tms=", tms)
}

# I only scraped three websites for test
res <- lapply(get_links(mas_url, 10, 1)[10:12], jsonlite::fromJSON)

列表中的每个元素 res 对应一个庄园。例如,您可以在

找到您需要的信息
res[[1L]]$items

输出

   negotiation                   name   notes                 value currency      type          unit topped
1        FALSE           Celková cena bez DPH             8 950 400       Kc price_czk za nemovitost     NA
2           NA             ID zakázky    NULL                  D401     <NA>    string          <NA>     NA
3           NA            Aktualizace    NULL                  Dnes     <NA>    edited          <NA>   TRUE
4           NA                 Stavba    NULL               Cihlová     <NA>    string          <NA>     NA
5           NA           Stav objektu    NULL            Novostavba     <NA>    string          <NA>     NA
6           NA            Vlastnictví    NULL                Osobní     <NA>    string          <NA>     NA
7           NA       Umístení objektu    NULL          Centrum obce     <NA>    string          <NA>     NA
8           NA                Podlaží    NULL 4. podlaží z celkem 5     <NA>    string          <NA>     NA
9           NA          Užitná plocha    NULL                    77     <NA>      area            m2     NA
10          NA       Plocha podlahová    NULL                    83     <NA>      area            m2     NA
11          NA                 Terasa    NULL                  TRUE     <NA>   boolean          <NA>     NA
12          NA                  Sklep    NULL                  TRUE     <NA>   boolean          <NA>     NA
13          NA                  Garáž    NULL                  TRUE     <NA>   boolean          <NA>     NA
14          NA      Datum nastehování    NULL            30.01.2023     <NA>      date          <NA>     NA
15          NA Datum zahájení prodeje    NULL            01.08.2020     <NA>      date          <NA>     NA
16          NA                  Výtah    NULL                  TRUE     <NA>   boolean          <NA>     NA