Выражение XPath для использования с importXML

На веб-сайте https://www.google.co.uk/finance?cid=704531 Я пытаюсь импортировать поля "Диапазон" и "52 неделя" и другие в этой группе посередине. Я посмотрел на XPath и очень смущен им.

В ячейке A1 у меня есть https://www.google.co.uk/finance?cid=704531.

В ячейке B1 у меня есть

=importxml(A1,//*[@id="market-data-div"]/div[2]/div[1]/table[1]/tbody/tr[4]/td[1])

Но в результате ошибка.

Какое правильное выражение XPath для этой структуры HTML?


person user2531064    schedule 28.06.2013    source источник
comment
Добро пожаловать в Stackoverflow! Пожалуйста, обратите немного больше внимания на форматирование и не используйте все заглавные буквы, это затрудняет чтение и понимание вашего вопроса и снижает вероятность того, что кто-то на него ответит. В часто задаваемых вопросах есть некоторая информация о том, как использовать Markdown для форматирования сообщений. Некоторые похвалы (и голосование) за то, что вы попробовали себя, прежде чем спрашивать!   -  person Jens Erat    schedule 28.06.2013


Ответы (1)


Дом и <tbody/>

Кажется, вы создали это выражение XPath в Firebug или подобных инструментах разработчика. В то время как HTML не требует тегов <tbody/>, DOM требует; и эти инструменты разработчика работают с DOM и, таким образом, заключают строки таблицы в такой элемент. Вы можете легко увидеть разницу, глядя на исходный код страницы (полученный с помощью wget или других инструментов, если это необходимо) и структуру, представленную Firebug.

Просто опустите шаг оси /tbody в своем выражении:

//*[@id='market-data-div']/div[2]/div[1]/table[1]/tr[4]/td[1]

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

//*[@id='market-data-div']//tr[td = 'Vol / Avg.']/td[2]

Цитирование выражения

Вторая проблема заключается в том, что вы должны заключать выражение XPath в двойные кавычки, поэтому, например, используйте:

=importxml(A1,"//*[@id='market-data-div']//tr[td = 'Vol / Avg.']/td[2]")
person Jens Erat    schedule 28.06.2013
comment
Я скопировал ваш Vol / Avg. предложение и добавил его к =importxml(A1, поэтому я получил =importxml(A1,//*[@id=market-data-div]//tr[td = Vol/Avg.]/td[2] ) Что имеет смысл, но я получаю ошибку синтаксического анализа в B1 - person user2531064; 28.06.2013
comment
О, я был слишком уверен, что проблема была в теле, поэтому я никогда не смотрел, как вы внедряете его в электронные таблицы. Вы должны заключать выражение в двойные кавычки, поэтому я переключился на одинарные кавычки внутри XPath. Смотрите мой ответ обновлений. - person Jens Erat; 28.06.2013
comment
Большое спасибо, что помогли мне с этим. У меня есть результат в cel B1, но в него попал и какой-то другой текст. Я ожидал увидеть 0,00/10,47 млн, но у меня есть 367 913,00/10,47 млн, не уверен, откуда взялись 367 913 ... если только это не более точная цифра ... Могу я спросить, хочу ли я изменить формулу, чтобы включить другие поля, как мне изменить вашу формулу, чтобы принять другие поля, такие как акции - person user2531064; 28.06.2013
comment
Я понял, я нашел более простой сайт для навигации по proactiveinvestors .co.uk/LON:SOLG/SolGold/financials Этот сайт содержит аналогичную информацию, но имеет более простую структуру. Я использовал инструмент разработчика Chrome, чтобы найти место, где находится информация, но теперь мне нужно понять часть xpath. Xpath: /html/body/div[7]/div[3]/div/div/div[2]/div[2]/table[1]/tbody/tr[1]/td - person user2531064; 28.06.2013
comment
То же самое снова, удалите шаги оси /tbody, которые вставил Chrome. - person Jens Erat; 28.06.2013