Equivalente a qual na raspagem?
Estou tentando executar algumas raspagens, nas quais a ação que tomo em um nó depende do conteúdo do nó.
Este deve ser um exemplo mínimo:
XML =
'<td class="id-tag">
<span title="Really Long Text">Really L...</span>
</td>
<td class="id-tag">Short</td>'
page = read_html(XML)
Basicamente, eu quero extrairhtml_attr(x, "title")
E se<span>
existe, caso contrário, é só pegarhtml_text(x)
.
O código para fazer o primeiro é:
page %>% html_nodes(xpath = '//td[@class="id-tag"]/span') %>% html_attr("title")
# [1] "Really Long Text"
O código para fazer o segundo é:
page %>% html_nodes(xpath = '//td[@class="id-tag"]') %>% html_text
# [1] "\n Really L...\n" "Short"
O verdadeiro problema é que ohtml_attr
abordagem não me dá nenhumaNA
ou algo semelhante para os nós que não correspondem (mesmo que eu deixe oxpath
apenas seja'//td[@class="id-tag"]'
primeiro para ter certeza de que reduzi apenas os nós relevantes primeiro. Isso destrói a ordem - não sei dizer automaticamente se a estrutura original tinha"Really Long Text"
no primeiro ou no segundo nó.
(Pensei em fazer uma junção, mas o mapeamento entre o texto abreviado e o texto completo não é um para um / é invertível).
este parece estar no caminho certo - uma construção if / else dentro doxpath
- mas não funciona.
Idealmente, eu obteria a saída:
# [1] "Really Long Text" "Short"