Rvest - Не могу прочитать содержимое сайта - Не знаю, какие узлы выбрать - PullRequest
0 голосов
/ 28 января 2020

Описание

Я перебираю веб-страницу для получения соответствующих данных. В качестве примера я буду использовать этот URL:

Пример

https://isbnsearch.org/search?s=THE+GODFATHER+%2C+Mario+Puzo

Моя первая итерация в основном поиск «Крестный отец, Марио Пузо», и результаты показаны в размещенном URL.

Проблема

Я пытаюсь использовать read_html(), но я не знаю, что включить в функцию html_nodes() для получения каких-либо значимых данных. Я пытался использовать «таблицу» или тому подобное, но ничего не вышло: возвращает пустой список

Конечная цель - получить либо ISBN-13, либо ISBN-10 первого результата поиска. Я могу позаботиться об этом, мне просто нужно получить доступ к данным.

Полагаю, * решение будет выглядеть примерно так:

url <- 'https://isbnsearch.org/search?s=THE+GODFATHER+%2C+Mario+Puzo'

data<-read_html(url) %>% html_nodes("something") %>% #maybe another function

Но я не знаю, надеюсь, кто-то может помочь.

Заранее спасибо.

1 Ответ

0 голосов
/ 28 января 2020

Если щелкнуть правой кнопкой мыши ISBN в Chrome и выбрать «Проверить», вы увидите, что каждый результат поиска представляет собой элемент списка со следующей структурой (для ясности некоторые элементы пропущены):

<ul id="searchresults">
  <li>
    <div class="bookinfo">
      <h2><a href="/isbn/9780451205766">The Godfather: 50th Anniversary Edition</a></h2>    
        <p>Author: Mario Puzo</p>
        <p>ISBN-13: 9780451205766</p>
        <p>ISBN-10: 0451205766</p>
        <p class="clear"></p>
    </div>
  </li>

Итак, селектор CSS для нужных вам элементов - div.bookinfo p.

. Вы можете получить текст этих абзацев, используя:

p <- read_html("https://isbnsearch.org/search?s=THE+GODFATHER+%2C+Mario+Puzo")
p %>% 
  html_nodes("div.bookinfo p") %>% 
  html_text()

, а затем напишите несколько логик c, чтобы получить доступ только к интересующим ISBN. Например, чтобы вернуть все ISBN, используя grep:

p %>% 
  html_nodes("div.bookinfo p") %>% 
  html_text() %>% 
  grep("ISBN*", ., value = TRUE)

 [1] "ISBN-13: 9780451205766" "ISBN-10: 0451205766"    "ISBN-13: 9780345441706" 
     "ISBN-10: 0345441702"    "ISBN-13: 9780345432407"
 [6] "ISBN-10: 0345432401"    "ISBN-13: 9780345412218" "ISBN-10: 0345412214"    
     "ISBN-13: 9780345476722" "ISBN-10: 0345476727"   
[11] "ISBN-13: 9781936530335" "ISBN-10: 1936530333"
...