#html #r #xpath #web-scraping #rvest
#HTML #r #xpath #очистка веб-страниц #rvest
Вопрос:
У меня есть этот html:
<div class="monty">album: <b>And Now For Something Completely Different</b> (1998)</div>
В настоящее время я использую этот xpath, чтобы найти его:
for_monty <- rvest::html_node(for_html_code, xpath = "/html/body/div[2]/div/div[2]/div[11]/div[1]/b")
Но не все страницы имеют этот номер div, поэтому иногда он ничего не очищает. Единственным постоянным классом является monty
, и я хотел бы извлечь только <b>
тег из этого div.
Ответ №1:
Звучит так, как будто ваш xpath должен быть //div[@class='monty']/b
Мы можем попробовать это как полное повторение в вашем собственном фрагменте:
library(rvest)
#> Loading required package: xml2
html <- "<div class="monty">album: <b>And Now For Something Completely Different</b> (1998)</div>"
read_html(html) %>%
html_nodes(xpath = "//div[@class='monty']/b")
#> {xml_nodeset (1)}
#> [1] <b>And Now For Something Completely Different</b>
Создано 2020-12-14 пакетом reprex (версия 0.3.0)
Комментарии:
1. О, вау, большое вам спасибо! Это работает отлично. Есть ли где-нибудь, где я могу прочитать больше о таких путях и о том, как их создавать? Я не мог найти, как это написать, поэтому мне пришлось спросить здесь. Или люди обычно используют какое-то расширение Chrome (или что-то в этом роде) для их создания?
2. @Aman нет, я считаю, что использование расширений Chrome или Firefox, которые предоставляют вам xpath, как правило, использует индексацию, что делает их гораздо более уязвимыми для незначительных изменений в структуре html. Вы можете ознакомиться с xpath здесь , и здесь есть много отличных вопросов и ответов на Stack Overflow для более сложных вещей.