Как создать скребок Hacker News Frontpage только с помощью 7 строк кода R

1656682330 kak sozdat skrebok hacker news frontpage tolko s pomoshhyu 7

от AMR

-18Q9O1MDch5FjFw06TAdTBi5wE1u15jPHhG
Это не R — https://www.pexels.com/photo/coffee-writing-computer-blogging-34676/

Когда-то веб-сборка была сложной задачей, требовавшей опыта анализа дерева XML и HTTP-запросов. Но с такими современными библиотеками копирования, как beautifulsoup (для Python) и rvest (для R), веб-скрапинг стал игрушкой для любого новичка.

Эта публикация должна объяснить, насколько просто использовать R, очень хороший язык программирования, для выполнения анализа и визуализации данных. Предыдущая задача очень проста. Создайте веб-скребок, который собирает содержимое одной из самых популярных страниц в Интернете (по крайней мере, среди кодеров): Главная страница новостей хакеров.

Установка и загрузка пакета

Пакет R, который мы собираемся использовать rvest. rvest можно установить из CRAN и скачать в R, как показано ниже:

library(rvest)

read_html() функция rvest можно использовать для извлечения HTML-содержимого URL-адреса, заданного в качестве аргумента для функции read_html.

content <- read_html('https://news.ycombinator.com/')

для read_html() Чтобы работать без проблем, пожалуйста, убедитесь, что вы не за пределом экрана организации. Если да, настройте свой RStudio с помощью прокси-сервера для обхода брандмауэра, иначе вы можете столкнуться с a connection timed out error.

Ниже приведен снимок экрана макета первой страницы HN (с выделенными ключевыми элементами):

4rSb9LXlF3ZcRyLEGeKrT2yX8vsQJkACkaXi

Теперь HTML-содержимое главной страницы Hacker News загружено в объект R содержимоедавайте вытащим данные, которые нам нужны – начиная с заголовка.

Есть один особо важный аспект успешного выполнения любого веб-сбора. Это означает идентифицировать правильный CSS селектор или значение XPath для элементов HTML, значения которых должны быть скопированы. Самый простой способ получить правильное значение элемента – это использовать the inspect tool в инструментах разработчика любого браузера

Вот снимок экрана значения CSS селектора. Он подсвечивается с помощью Chrome Inspect Tool, если навести курсор на название ссылки на главной странице Hacker News.

IEJOiDb3aUyj90KuhWzWyAO4eoQ3Z1jUcpNM
title <- content %>% html_nodes('a.storylink') %>% html_text()title [1] "Magic Leap One"                                                                   [2] "Show HN: Terminal – native micro-GUIs for shell scripts and command line apps"    [3] "Tokio internals: Understanding Rust's async I/O framework"                        [4] "Funding Yourself as a Free Software Developer"                                    [5] "US Federal Ban on Making Lethal Viruses Is Lifted"                                [6] "Pass-Thru Income Deduction"                                                       [7] "Orson Welles' first attempt at movie-making"                                      [8] "D’s Newfangled Name Mangling"                                                     [9] "Apple Plans Combined iPhone, iPad, and Mac Apps to Create One User Experience"    [10] "LiteDB – A .NET NoSQL Document Store in a Single Data File"                      [11] "Taking a break from Adblock Plus development"                                    [12] "SpaceX’s Falcon Heavy rocket sets up at Cape Canaveral ahead of launch"          [13] "This is not a new year’s resolution"                                             [14] "Artists and writers whose works enter the public domain in 2018"                 [15] "Open Beta of Texpad 1.8, macOS LaTeX editor with integrated real-time typesetting"[16] "The triumph and near-tragedy of the first Moon landing"                          [17] "Retrotechnology – PC desktop screenshots from 1983-2005"                         [18] "Google Maps' Moat"                                                               [19] "Regex Parser in C Using Continuation Passing"                                    [20] "AT&T giving $1000 bonus to all its employees because of tax reform"              [21] "How a PR Agency Stole Our Kickstarter Money"                                     [22] "Google Hangouts now on Firefox without plugins via WebRTC"                       [23] "Ubuntu 17.10 corrupting BIOS of many Lenovo laptop models"                       [24] "I Know What You Download on BitTorrent"                                          [25] "Carrie Fisher’s Private Philosophy Coach"                                        [26] "Show HN: Library of API collections for Postman"                                 [27] "Uber is officially a cab firm, says European court"                              [28] "The end of the Iceweasel Age (2016)"                                             [29] "Google will turn on native ad-blocking in Chrome on February 15"                 [30] "Bitcoin Cash deals frozen as insider trading is probed"

Пакет rvest поддерживает оператор канала %>%. Таким образом, объект R, содержащий содержимое страницы HTML (прочитан с помощью read_html), может передаваться по каналу with html_nodes(), который принимает селектор CSS или XPath в качестве аргумента. Затем он может извлечь соответствующее XML-дерево (или значение узла HTML), текстовое значение которого можно извлечь with html_texфункция t().

Прелесть rvest заключается в том, что он отвлекает всю операцию анализа XML под капотом таких функций, как html_nodes() и html_text(). Таким образом, нам легче достичь нашей цели скрапинга с минимальным количеством кода.

Как и в случае Title, значение селектора CSS других необходимых элементов веб-страницы можно определить с помощью инструмента Chrome Inspect. Их можно передать в качестве аргумента функции html_nodes(), а соответствующие значения можно получить и сохранить в объектах R.

link_domain <- content %>% html_nodes('span.sitestr') %>% html_text()score <- content %>% html_nodes('span.score') %>% html_text()age <- content %>% html_nodes('span.age') %>% html_text()

Со страницы удалена вся важная информация. Теперь кадр данных R можно создать с извлеченными элементами, чтобы поместить извлеченные данные в структурированный формат.

df <- data.frame(title = title, link_domain = link_domain, score = score, age = age)

Ниже приведен снимок окончательного кадра данных в средстве просмотра RStudio:

hEnsMstgI7-hwhOHGx9LrexwgAEoOb8q5bmK

Таким образом, всего за 7 строк кода мы успешно создали Hacker News Frontpage Scraper в R.

R — отличный язык для анализа и визуализации данных. Использованный здесь код доступен на моем github.

Добавить комментарий

Ваш адрес email не будет опубликован.