2016-09-09 3 views
0

С сайта http://www.findagrave.com/cgi-bin/fg.cgi?page=gr&GScid=97961&GRid=22682396 Я пытаюсь извлечь только текстовые данные, такие как рождение, смерть, биография, местоположение и созданные по разделам в разные строки/столбцы. Я хочу иметь электронную таблицу, где я могу ввести URL-адрес FindAGrave и извлечь из него данные выше для меня. Я читал здесь Using =importXML in Google Docs, что его можно сделать по описаниям. Оттуда я научился опускать Xpath tbody. Это успешно получило мой импорт для работы, но без использования описаний. Я уверен, что если использование описаний будет более эффективным или нет. Я просто хочу узнать, как другие люди будут импортировать данные из таблиц. ThanksИспользование = IMPORTXML в Google Spreadsheets для извлечения таблицы по описаниям

Вот что я получил до сих пор. Это извлечет информацию о рождении и поместит строки. Одна из проблем заключается в том, что она добавляет дополнительную ячейку между данными.

=IMPORTXML("http://www.findagrave.com/cgi-bin/fg.cgi?page=gr&GScid=97961&GRid=22682396", "//html/body/table/tr/td[3]/table/tr[4]/td[1]/table/tr/td/table/tr/td/table/tr[1]/td[2]") 

Результат

Dec. 2, 1882  Humphreys County  Tennessee, USA 

Обновление: Я думаю, что я сделал некоторый процесс вместе в коде. Это то, с чем я сейчас работаю.

=IMPORTXML("http://www.findagrave.com/cgi-bin/fg.cgi?page=gr&GScid=97961&GRid=22682396", "//*[@class='gr'][1]//tr/td/table/tr/td/table/tr[1]/td[1]") 
=IMPORTXML("http://www.findagrave.com/cgi-bin/fg.cgi?page=gr&GScid=97961&GRid=22682396", "//*[@class='gr']//tr/td/table/tr/td/table/tr[1]/td[2]/text()[1]") 
=IMPORTXML("http://www.findagrave.com/cgi-bin/fg.cgi?page=gr&GScid=97961&GRid=22682396", "//*[@class='gr']//tr/td/table/tr/td/table/tr[1]/td[2]/text()[2]") 
=IMPORTXML("http://www.findagrave.com/cgi-bin/fg.cgi?page=gr&GScid=97961&GRid=22682396", "//*[@class='gr']//tr/td/table/tr/td/table/tr[1]/td[2]/text()[3]") 
=IMPORTXML("http://www.findagrave.com/cgi-bin/fg.cgi?page=gr&GScid=97961&GRid=22682396", "//*[@class='gr']//tr/td/table/tr/td/table/tr[1]/td[2]/text()[4]") 

=IMPORTXML("http://www.findagrave.com/cgi-bin/fg.cgi?page=gr&GScid=97961&GRid=22682396", "//*[@class='gr'][1]//tr/td/table/tr/td/table/tr[2]/td[1]") 
=IMPORTXML("http://www.findagrave.com/cgi-bin/fg.cgi?page=gr&GScid=97961&GRid=22682396", "//*[@class='gr']//tr/td/table/tr/td/table/tr[2]/td[2]/text()[1]") 
=IMPORTXML("http://www.findagrave.com/cgi-bin/fg.cgi?page=gr&GScid=97961&GRid=22682396", "//*[@class='gr']//tr/td/table/tr/td/table/tr[2]/td[2]/text()[2]") 
=IMPORTXML("http://www.findagrave.com/cgi-bin/fg.cgi?page=gr&GScid=97961&GRid=22682396", "//*[@class='gr']//tr/td/table/tr/td/table/tr[2]/td[2]/text()[3]") 
=IMPORTXML("http://www.findagrave.com/cgi-bin/fg.cgi?page=gr&GScid=97961&GRid=22682396", "//*[@class='gr']//tr/td/table/tr/td/table/tr[2]/td[2]/text()[4]") 

Результаты:

Birth: 
Nov. 8, 1948 
Benton 
Saline County 
Arkansas, USA 

Death: 
Jan. 6, 2006 
Tulsa 
Tulsa County 
Oklahoma, USA 

Есть ли способ, чтобы разделить это вверх данных в коде?

ответ

0

Следующая формула

=IMPORTXML(
"http://www.findagrave.com/cgi-bin/fg.cgi?page=gr&GScid=97961&GRid=22682396", 
"//html/body/table/tr/td[3]/table/tr[4]/td[1]/table/tr/td/table/tr/td/table/tr[position()<=2]/td/text()" 
) 

возвращает

Birth: 
Nov. 8, 1948 
Benton 
Saline County 
Arkansas, USA 
Death: 
Jan. 6, 2006 
Tulsa 
Tulsa County 
Oklahoma, USA 

Более короткая альтернатива,

=IMPORTXML(
"http://www.findagrave.com/cgi-bin/fg.cgi?page=gr&GScid=97961&GRid=22682396", 
"//tr[4]/td[1]//tr[position()<=2]/td/text()" 
) 

возвращает тот же результат

0

Вы можете получить несколько полей важной простоты фикации ваши XPaths - вы можете также добавить несколько в один вызов функции, разделяющей XPaths с |:

`=ARRAYFORMULA(TRIM(TRANSPOSE(IMPORTXML($A3,"//td[@align='left']/text()|//tr[6]/td/a|//tr[3]/td/text()[1]"))))` 

enter image description here

Три XPaths используются:

//td[@align='left']/text()

//tr[6]/td/a

//tr[3]/td/text()[1]

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