Nano Hash - криптовалюты, майнинг, программирование

Извлечение списка имен и основных гиперссылок с веб-страницы с помощью rvest

Я новичок в веб-скрейпинге и пытаюсь разобраться с использованием rvest для сбора данных с веб-страницы. Интересующая веб-страница: https://www.cabq.gov/office-of-neighborhood-coordinate/neighborhood-homeowner-coalition-websites, который содержит список общественных организаций с базовыми гиперссылками на их веб-сайты. Я пытаюсь создать фрейм данных, в котором первый столбец — это название организации, а второй столбец — это URL-адрес из гиперссылки.

Я следил за парой руководств rvest и вопросами переполнения стека, чтобы попытаться разобрать соответствующие узлы для извлечения интересующей меня информации, но безрезультатно. Желаемый вывод будет выглядеть следующим образом (... просто обрезает вывод посередине между желаемым началом и концом цели выходной таблицы):

| organization                                   | URL                                 |
| ---------------------------------------------- | ----------------------------------- |
| 7 Bar North Homeowners Association             | https://www.7barnorthhoa.com/       |
| Academy Acres North Neighborhood Association   | http://www.aanna.org/               |
....
| Willow Wood Neighborhood Association           | http://www.hoamcoweb.com/willowwood |
| Winrock Villas Condominium Association         | http://winrockvillas.hoaspace.com/  |

Моя попытка кода ниже.

library(xml2)
library(rvest)
library(tidyverse)

URL <- "https://www.cabq.gov/office-of-neighborhood-coordination/neighborhood-homeowner-coalition-websites"

pg <- read_html(URL)

html_nodes(pg, "external-link") %>% 
  map_df(function(x) {
    data_frame(
      postal = html_node(x, "span") %>% html_text(trim=TRUE),
      city = html_nodes(x, "ul > li") %>% html_text(trim=TRUE)
    )
  })  
#> # A tibble: 0 x 0

Создано 15 февраля 2021 г. в пакете reprex (v0.3.0)

Любая помощь приветствуется.

15.02.2021

Ответы:


1

Во-первых, я думаю, вам нужно использовать выражение xpath, чтобы получить правильный тип ссылок. . Вас интересуют элементы a класса external-link, поэтому вы можете использовать:

html_nodes(pg, xpath="//a[@class='external-link']")

Вы можете создать более сложное выражение xpath, которое соответствует тому, что вам нужно получить. Затем вам нужно извлечь текст и один атрибут элемента, вы можете использовать:

html_nodes(pg, xpath="//a[@data-linktype='external' or 
 @class='external-link']") %>% 
map_df(function(x) {
data_frame(
  organization =  x %>% html_text(trim=TRUE),
  URL = x %>% html_attr("href")
)})  
15.02.2021
  • Это кажется близким (спасибо!), но не дает всех перечисленных организаций. Похоже, что только некоторые из них относятся к классу external-link, но другие относятся к таким вещам, как a data-val=. 16.02.2021
  • Да, это правда, вы используете xpath для поиска более сложных шаблонов: html_nodes(pg, xpath=//a[@data-linktype='external' или @class='external-link']) 16.02.2021
  • Это сделало трюк! Спасибо, Хосе! Точно так же я получаю синтаксис здесь (поскольку я новичок в использовании xpaths), это говорит: для всех тегов ‹a›, которые содержат теги @data-linktype='external' или ‹a›, которые содержат class=' external-link» передать текст в переменную организации и URL-адрес в базовом теге ‹a href› в переменную URL? Что-то, что я до сих пор не совсем понимаю, это функция скобок в команде html_nodes() 16.02.2021
  • Привет, Абэ, в xpath //a будет искать все теги <a>, квадратные скобки [...] используются для подмножества или фильтрации, @ используется для ссылки на атрибут внутри тега. Выражение xpath: //a[@data-linktype='external' or @class='external-link'] будет выглядеть так: выберите все теги ‹a›, которые имеют атрибут data-linktype со значением «внешний» или атрибут class с значение «внешняя ссылка» 17.02.2021
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..