Отступ абзаца столбца в кадре данных - PullRequest
0 голосов
/ 15 января 2020

Я пытался сделать webscraping, и мне удалось получить заголовки и подробное содержание новости. Код для того же:

webpage <- read_html("https://www.rediff.com/sports")

headlines.node <- html_nodes(webpage,'.relative h2 a')
headlines <- html_text(headlines.node)
headlines <- str_squish(headlines)

links <- webpage %>% html_nodes(".relative h2 a") %>% 
html_attr("href")

content <- c()
for(i in 1:length(links)){
  newslink <- links[i]
  webpage <- read_html(newslink)
  story.node <- html_nodes(webpage, "p")
  story <-  html_text(story.node)
  story <- str_squish(story)
  content[i] <- paste(story, collapse = '')
}

df <- data.frame("Headlines"=headlines, "Main Content"=content)

Однако, чтобы сохранить подробный контент новостей в поле данных, мне пришлось свернуть подробный сюжет контента страницы, без которого она возвращалась: «В content [i] <- story: количество заменяемых элементов не кратно длине замены»), так как он возвращал несколько строк данных абзаца. </p>

Аргумент collapse создал столбец с данные типа:

df$Main.Content[1] 

Вышеприведенная строка вернула: [1] NewsApp (бесплатно) Кохли получает гонг Spirit of Cricket; Стоукс - я CC Игрок в крикет Года. Новичок Индии Рохит Шарма был в среду назван Игроком по кличке года ODI I CC 2019 за его невероятную форму, в то время как Энгли sh универсал Бен Стоукс ушел с общим отличием. Индийский шкипер Вират Кохли был назван капитаном команд I CC Test и ODI года, кроме того, он выиграл награду «Дух крикета» за попытку помешать поклонникам бить Стива Смита во время Матч Кубка мира по овалу. Смит возвращался в международный крикет из-за годичной приостановки за подделку мяча. Победивший в Кубке мира универсал Стоукс получил самый большой приз - «Сэр Гарфилд Соберс Трофи» за «Игрок года», в то время как Австралия быстрый котелок Пэт Камминс был назван Игроком-испытателем Года. Индийский закройщик Дипак Чахар выиграл Международное выступление T20 года, австралийский Марнус Лабушан был назван новым игроком в крикет года, в то время как шотландский Кайл Кетцер был объявлен ассоциированным игроком в крикет года . 32-летний. , , , , , , , и оставшаяся история (не копируя всю вещь здесь ...)

Мы потеряли отступ абзаца, и текст выглядит грязным. Есть ли способ сохранить отступ абзаца каждой ссылки и сохранить его в поле кадра данных?

Пример: например, когда я нажимаю

df$Main.Content[1]

Это должно верните мне чистый абзац с абзацем:

NewsApp (бесплатно) Кохли получает гонг «Дух крикета»; Стоукс - я CC Игрок в крикет года. Новичок Индии Рохит Шарма был в среду назван Игроком по кличке года ODI I CC 2019 за его невероятную форму, в то время как Энгли sh универсал Бен Стоукс ушел с общим отличием.

Индийский шкипер Вират Кохли был назван капитаном команд I CC Test и ODI года, кроме того, что получил награду «Дух крикета» за попытку остановить фанатов от бухания Стива Смита во время матча Кубка мира в Овале. Смит возвращался в международный крикет из-за годичной приостановки за подделку мячей.

(и т. Д., Как на исходной странице)

Я пытался объяснить лучше всего мое требование Пожалуйста, спросите, если что-то неясно по этому вопросу.

1 Ответ

1 голос
/ 15 января 2020

Один из способов - свернуть story с символом новой строки

library(rvest)

for(i in 1:length(links)){
  newslink <- links[i]
  webpage <- read_html(newslink)
  story.node <- html_nodes(webpage, "p")
  story <-  html_text(story.node)
  story <- str_squish(story)
  content[i] <- paste(story, collapse = '\n\n')
}

df <- data.frame(Headlines=headlines,Main_Content=content, stringsAsFactors = FALSE)

, а затем просмотреть текст с помощью cat

cat(df$Main_Content[1])

#Diagnosed with a concussion, wicketkeeper Rishabh Pant will not travel 
#with #the Indian team to Rajkot for the second ODI against Australia.

#Pant didn't take the field for the second half of the first ODI in 
#Mumbai #on Tuesday after getting hit on the helmet while batting. He 
#remains under #observation.

#"Rishabh Pant will not be travelling to Rajkot today with other 
#members. He will join the team later," a BCCI source told PTI.

#"Normally 24 hours is the time to keep someone who has suffered concussion 
#under observation," he added.
#....
...