Jazzy Scraping с R и без селекторов - PullRequest
0 голосов
/ 26 мая 2018

Я использовал rvest для очистки страниц, и я знаю о преимуществах selectorGadget.Однако на одной странице есть данные БЕЗ селекторов.Фрагмент HTML ниже.Страница здесь .Я пытаюсь вычистить список персонала на каждом из перечисленных джазовых альбомов.В приведенном ниже фрагменте HTML данные о персонале начинаются с "Sonny Rollins, tenor sax ..." Как видите, этот текст не окружен никакими селекторами CSS.Любой совет по соскобу это?

<h1>Blue Note Records Catalog: 4000 series</h1>
<div id="start-here"><!-- id="start-here" --></div>
<div id="catalog-data">
<h2>Modern Jazz 4000 series (12 inch LP)</h2>
<h3><a href="./album-index/#blp-4001" name="blp-4001">BLP 4001 &nbsp; Sonny         
Rollins - Newk's Time &nbsp; <i>1959</i></a></h3>
Sonny Rollins, tenor sax; Wynton Kelly, piano #1,2,4-6; Doug Watkins, bass     
#1,2,4-6; Philly Joe Jones, drums.
<div class="date">Van Gelder Studio, Hackensack, NJ, September 22, 
1957</div>
<table width="100%">
<tr><td width="15%">1. tk.5<td>Tune Up

И т.д ...

1 Ответ

0 голосов
/ 26 мая 2018

Извлечение с использованием xpath и регулярного выражения для фильтрации элементов.Следующий скрипт должен работать.

library(rvest)
library(stringr)

texts <- read_html("https://www.jazzdisco.org/blue-note-records/catalog-4000-series/") %>% 
    html_nodes(xpath = '//*[@id="catalog-data"]/text()') %>%
    html_text()

texts[!str_detect(texts,"(^\\n$)|(^\\n\\*\\*)")] # I just notcie this line doesn't clean up the string entirely, you can figure out better regex.

Что касается разбиения строки, вы можете попробовать следующий код:

sample_str <- "\nIke Quebec, tenor sax; Sonny Clark, piano; Grant Green, guitar; Sam Jones, bass; Louis Hayes, drums.\n" 
str_trim(sample_str) %>%
    str_split(",")

возвращает:

[[1]]
[1] "Ike Quebec"              " tenor sax; Sonny Clark" " piano; Grant Green"     " guitar; Sam Jones"      " bass; Louis Hayes"      " drums."
...