2016-02-05 4 views
0

Я всегда старался использовать пакет xml в R, и мне нужна помощь, скремблирующая некоторые хорошо отформатированные таблицы с xml2.Скремблирование первых двух столбцов веб-таблиц с xml2

URL-адрес первой страницы таблиц, которые я хотел бы очистить, - here. На некоторых страницах я хочу вторую и третью таблицы, но на других я хочу первый и второй. Общий поток - это то, что я хочу, чтобы все таблицы, где тег «caption» содержит текст, «который встречается», соскабливаемый и сохраненный в одном списке, и таблицы, в которых тег «caption» содержит текст «, который не соответствует ни одному». Но я действительно не знаю, как это понять. Код, с которым я работаю, выглядит следующим образом. Я могу представить, что должен быть какой-то способ сделать регулярное выражение условием для выбора всей таблицы. Надеюсь, что код работает.

#Define urls 
urls<-lapply(seq(1,12, 1), function(x) paste('http://www.chemicalsubstanceschimiques.gc.ca/challenge-defi/batch-lot-',x,'/index-eng.php', sep='')) 
#scrap the text 
batches<-lapply(urls, function(x) read_html(x)) 
#Return the tables from each 
batches_tables<-lapply(batches, function(x) xml_find_all(x, './/table')) 
#get the table from the first 
out<-batches[[1]] 
#Inspect 
out[[1]] #do not want this table 
out[[2]] #want this table pasted in one list, caption='that meet' 
out[[2]] #want this table pasted in a second list, caption='that do not meet' 
+0

'rvest' имеет очень приятный SelectorGadget, который может помочь вам найти соответствующие CSS или XPath селекторы. См. 'Vignette (" selectorgadget ", package = 'rvest')'. 'rvest :: html_table' также будет полезен здесь. – alistaire

ответ

0

Target caption тег с помощью затем перейти к родителю:

library(xml2) 
library(rvest) 

URL <- "http://www.chemicalsubstanceschimiques.gc.ca/challenge-defi/batch-lot-1/index-eng.php#s1" 
pg <- read_html(URL) 

html_nodes(pg, xpath=".//table/caption[contains(., 'that meet')]/..") 
## {xml_nodeset (1)} 
## [1] <table class="fontSize80">&#13;\n   <caption>&#13;\n   ... 

html_nodes(pg, xpath=".//table/caption[contains(., 'that do not meet')]/..") 
## {xml_nodeset (1)} 
## [1] <table class="fontSize85">&#13;\n   <caption>&#13;\n   ... 

 Смежные вопросы

  • Нет связанных вопросов^_^