Я пытаюсь очистить данные из нескольких URL-адресов сестры для анализа. Предыдущий поток Scraping a web page, links on a page, and forming a table with R был полезным в получении меня на правильном пути со следующим сценарием:Скребок связанных страниц в R
rm(list=ls())
library(XML)
library(RCurl)
#=======2013========================================================================
url2013 = 'http://www.who.int/csr/don/archive/year/2013/en/index.html'
doc <- htmlParse(url2013)
dummy2013 <- data.frame(
dates = xpathSApply(doc, '//*[@class="auto_archive"]/li/a', xmlValue),
hrefs = xpathSApply(doc, '//*[@class="auto_archive"]/li/a', xmlGetAttr,'href'),
title = xpathSApply(doc, '//*[@class="link_info"]/text()', xmlValue)
)
dummy2013$text = unlist(lapply(dummy2013$hrefs,function(x)
{
url.story <- gsub('/entity','http://www.who.int',x)
texts <- xpathSApply(htmlParse(url.story),
'//*[@id="primary"]',xmlValue)
}))
dummy2013$link <- gsub('/entity','http://www.who.int',dummy2013$hrefs)
write.csv(dummy2013, "whoDON2013.csv")
Однако применительно к сестринским URL-адресам, вещи ломаются. Попытка
#=======2011========================================================================
url2011 = 'http://www.who.int/csr/don/archive/year/2011/en/index.html'
doc <- htmlParse(url2011)
dummy2011 <- data.frame(
dates = xpathSApply(doc, '//*[@class="auto_archive"]/li/a', xmlValue),
hrefs = xpathSApply(doc, '//*[@class="auto_archive"]/li/a', xmlGetAttr,'href'),
title = xpathSApply(doc, '//*[@class="link_info"]/text()', xmlValue)
)
, например, производит
## Error in data.frame(dates = xpathSApply(doc, "//*[@class=\"auto_archive\"]/li/a", :
arguments imply differing number of rows: 59, 60
Подобные ошибки возникают в http://www.who.int/csr/don/archive/year/2008/en/index.html и http://www.who.int/csr/don/archive/year/2006/en/index.html. Мне не удобно с HTML или XML; любые идеи оценили.
Я предполагаю Ошибка возникает, потому что для даты у вас более одной истории. Сценарий предполагает, что у вас есть одна-одна история отношений-> дата. – agstudy
Возможно, вы могли бы использовать все истории, которые сгруппированы под '
', чтобы поймать эти дубликаты '' link_info''s. – ThomasСпасибо, хотя мне непонятно, что повторяющиеся даты - проблема - тот же скрипт работает в 2012 году (http://www.who.int/csr/don/archive/year/2011/en/index.html), например, и успешно сбрасывает три истории, которые произошли 23 ноября. – user2535366