У меня есть этот 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.
Звучит так, как будто ваш 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>
Created on 2020-12-14 by the reprex package (v0.3.0)
@Aman Нет, я обнаружил, что при использовании расширений Chrome или Firefox, которые дают вам xpaths, как правило, используется индексация, что делает их гораздо более уязвимыми для незначительных изменений в структуре html. Вы можете познакомиться с xpath здесь, а прямо здесь, в Stack Overflow, есть много отличных вопросов и ответов для более сложных вещей.
Ого, спасибо большое! Это работает отлично. Где-нибудь я могу прочитать больше о таких путях и о том, как их сделать? Не нашел как написать, поэтому спрашивал здесь. Или люди обычно используют какое-то расширение Chrome (или что-то еще) для их создания?