R - это язык программирования общего назначения , так что вы можете сделать с ним что угодно .
Основная идиома того, что вы пытаетесь сделать:
- Определение целевого сайта
- Извлечение контента и метаданных контента
- Кэш ^^ (вам нужно это выяснить; таблицы СУБД? Таблицы NoSQL? Файлы?)
- Пусть
n
пройдут временные периоды (вам необходимо выяснить это: cron? Launchd? Amazon lambda?) - Извлечь контент и метаданные контента
- Сравнить ^^ с кэшированными версиями;ПРИМЕЧАНИЕ: это работает лучше всего, если вы знаете, что структура целевого сайта отличается от чрезмерно универсальной структуры)
- Если разница «значительна», сообщите об этом любыми способами (вам нужно это выяснить: электронная почта? SMS«Твиттер»)
Для контента вы можете не знать, что httr::GET()
возвращает сложный, сложный объект данных, полный метаданных.Я не сделал str(res)
ниже, чтобы побудить вас сделать это самостоятельно.
library(httr)
library(rvest)
library(splashr)
library(hgr) # devtools::install_github("hrbrmstr/hgr")
library(tlsh) # devtools::install_github("hrbrmstr/tlsh")
target_url <- "https://www.whitehouse.gov/briefings-statements/"
Получите его, как браузер
httr::GET(
url = target_url,
httr::user_agent(splashr::ua_macos_safari)
) -> res
Кэшируйте размер страницы и используйте значительный объемразница с уведомлением о сигнале
(page_size <- res$headers['content-length'])
## $`content-length`
## [1] "12783"
Для вычисления и кэширования локального значения хэширования для сенсибилизации используйте tlsh_simple_diff()
, чтобы увидеть, есть ли "существенные" изменения хэша, и используйте его в качестве сигнала для уведомления:
doc_text <- httr::content(res, as = "text")
(doc_hash <- tlsh_simple_hash(doc_text))
## [1] "563386E33C44683E060B739261ADF20CB2D38563EE151C88A3F95169999FF97A1F385D"
Этот сайт использует структурированный кэш <div>
, поэтому использует больше / меньше / разных для сигнализации уведомлений:
doc <- httr::content(res)
news_items <- html_nodes(doc, "div.briefing-statement__content")
(total_news_items <- length(news_items))
## [1] 10
(headlines <- gsub("[[:space:]]+", " ", html_text(news_items, trim=TRUE)))
## [1] "News Clips CNBC: “Job Openings Hit Record 7.136 Million in August” Economy & Jobs Oct 16, 2018"
## [2] "Fact Sheets Congressional Democrats Want to Take Away Your Doctor, Outlaw Your Private Insurance, and Put Bureaucrats In Charge of Your Healthcare Healthcare Oct 16, 2018"
## [3] "Remarks Remarks by President Trump in Briefing on Hurricane Michael Land & Agriculture Oct 15, 2018"
## [4] "Remarks Remarks by President Trump and Governor Scott at FEMA Aid Distribution Center | Lynn Haven, FL Land & Agriculture Oct 15, 2018"
## [5] "Remarks Remarks by President Trump During Tour of Lynn Haven Community | Lynn Haven, FL Land & Agriculture Oct 15, 2018"
## [6] "Remarks Remarks by President Trump and Governor Scott Upon Arrival in Florida Land & Agriculture Oct 15, 2018"
## [7] "Remarks Remarks by President Trump Before Marine One Departure Foreign Policy Oct 15, 2018"
## [8] "Statements & Releases White House Appoints 2018-2019 Class of White House Fellows Oct 15, 2018"
## [9] "Statements & Releases President Donald J. Trump Approves Georgia Disaster Declaration Land & Agriculture Oct 14, 2018"
## [10] "Statements & Releases President Donald J. Trump Amends Florida Disaster Declaration Land & Agriculture Oct 14, 2018"
Используйте инструмент «читабельность», чтобы превратить содержимое в открытый текст и сравнить его содин из множества пакетов «text diff / string diff» R:
content_meta <- hgr::just_the_facts(target_url)
str(content_meta)
## List of 11
## $ title : chr "Briefings & Statements"
## $ content : chr "<p class=\"body-overflow\"> <header class=\"header\"> </header>\n<main id=\"main-content\"> <div class=\"page-r"| __truncated__
## $ lead_image_url: chr "https://www.whitehouse.gov/wp-content/uploads/2017/12/wh.gov-share-img_03-1024x538.png"
## $ next_page_url : chr "https://www.whitehouse.gov/briefings-statements/page/2"
## $ url : chr "https://www.whitehouse.gov/briefings-statements/"
## $ domain : chr "www.whitehouse.gov"
## $ excerpt : chr "Get official White House briefings, statements, and remarks from President Donald J. Trump and members of his Administration."
## $ word_count : int 22
## $ direction : chr "ltr"
## $ total_pages : int 2
## $ pages_rendered: int 2
## - attr(*, "row.names")= int 1
## - attr(*, "class")= chr "hgr"
К сожалению, вы задали вопрос общего назначения по вычислениям, и поэтому он, скорее всего, закроется.