Есть ли в R пакеты для мониторинга контента? - PullRequest
0 голосов
/ 16 октября 2018

Я знаю, что существуют бесплатные программы мониторинга контента веб-сайтов, которые отправляют оповещения по электронной почте, когда контент веб-сайта изменяется, но есть ли пакет (или какой-либо способ с жестким кодом) в R, который может это сделать?Было бы полезно объединить это в одном рабочем процессе.

1 Ответ

0 голосов
/ 16 октября 2018

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"

К сожалению, вы задали вопрос общего назначения по вычислениям, и поэтому он, скорее всего, закроется.

...