Как разобрать список URL, чтобы получить "Link" и "id" с помощью xml в R

Yvonne Dong спросил: 12 мая 2018 в 05:19 в: r
[1] "<item xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"itemWithRetweets\" link=\"http://twitter.com/charliekirk11/statuses/1002221842894012416\" id=\"1002221842894012416\">\n  <author>Charlie Kirk</author>\n  <date>2018-05-31T12:14:42-04:00</date>\n  <attachments/>\n  <estimated_retweets>30</estimated_retweets>\n  <screenName>charliekirk11</screenName>\n  <avatarUrl>http://pbs.twimg.com/profile_images/993982887635685377/4CEEsYDS_normal.jpg</avatarUrl>\n  <language>en</language>\n  <location>\n    <country>US</country>\n    <locationString>Chicago, Illinois</locationString>\n  </location>\n</item>"
[2] "<item xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"itemWithRetweets\" link=\"http://twitter.com/charliekirk11/statuses/1002221842894012416\" id=\"1002221842894012416\">\n  <author>Charlie Kirk</author>\n  <date>2018-05-31T12:14:42-04:00</date>\n  <attachments/>\n  <estimated_retweets>30</estimated_retweets>\n  <screenName>charliekirk11</screenName>\n  <avatarUrl>http://pbs.twimg.com/profile_images/993982887635685377/4CEEsYDS_normal.jpg</avatarUrl>\n  <language>en</language>\n  <location>\n    <country>US</country>\n    <locationString>Chicago, Illinois</locationString>\n  </location>\n</item>"
[3] "<item xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"itemWithRetweets\" link=\"http://twitter.com/charliekirk11/statuses/1002221842894012416\" id=\"1002221842894012416\">\n  <author>Charlie Kirk</author>\n  <date>2018-05-31T12:14:42-04:00</date>\n  <attachments/>\n  <estimated_retweets>30</estimated_retweets>\n  <screenName>charliekirk11</screenName>\n  <avatarUrl>http://pbs.twimg.com/profile_images/993982887635685377/4CEEsYDS_normal.jpg</avatarUrl>\n  <language>en</language>\n  <location>\n    <country>US</country>\n    <locationString>Chicago, Illinois</locationString>\n  </location>\n</item>"

У меня есть список URL-адресов и вы хотите захватить только "ссылку" и "id". Я пробовал xml_attr (x,"link) и xml_attr (x," id"), но он не работает для списка.

1 ответ

cderv ответил: 12 мая 2018 в 04:25

В одном решении используется purrr пакет из tidyverse.

В принципе, функция map позволяет вам перебирать список, применять функцию и возвращаться список. Здесь я проанализировал xml и убрал значение в формате tibble (data.frame like). map_dfr преобразует непосредственно результирующий список формата таблицы aa по привязке строки.

xml_text <- list("<item xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"itemWithRetweets\" link=\"http://twitter.com/charliekirk11/statuses/1002221842894012416\" id=\"1002221842894012416\">\n  <author>Charlie Kirk</author>\n  <date>2018-05-31T12:14:42-04:00</date>\n  <attachments/>\n  <estimated_retweets>30</estimated_retweets>\n  <screenName>charliekirk11</screenName>\n  <avatarUrl>http://pbs.twimg.com/profile_images/993982887635685377/4CEEsYDS_normal.jpg</avatarUrl>\n  <language>en</language>\n  <location>\n    <country>US</country>\n    <locationString>Chicago, Illinois</locationString>\n  </location>\n</item>",
"<item xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"itemWithRetweets\" link=\"http://twitter.com/charliekirk11/statuses/1002221842894012416\" id=\"1002221842894012416\">\n  <author>Charlie Kirk</author>\n  <date>2018-05-31T12:14:42-04:00</date>\n  <attachments/>\n  <estimated_retweets>30</estimated_retweets>\n  <screenName>charliekirk11</screenName>\n  <avatarUrl>http://pbs.twimg.com/profile_images/993982887635685377/4CEEsYDS_normal.jpg</avatarUrl>\n  <language>en</language>\n  <location>\n    <country>US</country>\n    <locationString>Chicago, Illinois</locationString>\n  </location>\n</item>",
"<item xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"itemWithRetweets\" link=\"http://twitter.com/charliekirk11/statuses/1002221842894012416\" id=\"1002221842894012416\">\n  <author>Charlie Kirk</author>\n  <date>2018-05-31T12:14:42-04:00</date>\n  <attachments/>\n  <estimated_retweets>30</estimated_retweets>\n  <screenName>charliekirk11</screenName>\n  <avatarUrl>http://pbs.twimg.com/profile_images/993982887635685377/4CEEsYDS_normal.jpg</avatarUrl>\n  <language>en</language>\n  <location>\n    <country>US</country>\n    <locationString>Chicago, Illinois</locationString>\n  </location>\n</item>")library(xml2)
library(tibble)
library(purrr)
xml_text %>% 
  map_dfr(~ {
    content <- read_xml(.x)
    tibble(
      link = xml_attr(content, "link"),
      id = xml_attr(content, "id")
    )
  })
#> # A tibble: 3 x 2
#>   link                                                          id        
#>   <chr>                                                         <chr>     
#> 1 http://twitter.com/charliekirk11/statuses/1002221842894012416 100222184~
#> 2 http://twitter.com/charliekirk11/statuses/1002221842894012416 100222184~
#> 3 http://twitter.com/charliekirk11/statuses/1002221842894012416 100222184~

Создано в 2018-06-06 пакетом reprex (v0.2.0) .