Ошибка импорта таблицы Google XML - PullRequest
0 голосов
/ 13 июля 2020

Этот работает:

=importxml("https://discgolfmetrix.com/?u=scorecard&ID=900113&view=result", "//table[@class='data data-hover']/tr/td[2]")

Этот не работает:

=importxml("https://discgolfmetrix.com/?u=scorecard&ID=1172639&view=result", "//table[@class='data data-hover']/tr/td[2]")

Если бы было наоборот, я бы это понял, так как первый имеет 2 тега tbody.

1 Ответ

1 голос
/ 13 июля 2020

GoogleSheets анализирует страницу по-своему (родительская >> дочерняя структура не совсем такая же, как в вашем браузере). Используйте //tr в XPath, чтобы обойти ошибки синтаксического анализа:

=IMPORTXML("https://discgolfmetrix.com/?u=scorecard&ID=1172639&view=result","//table[@class='data data-hover']//tr/td[2]")

Или используйте IMPORTHMTL и QUERY:

=QUERY(IMPORTHTML("https://discgolfmetrix.com/?u=scorecard&ID=1172639&view=result","table",1),"select Col2 OFFSET 1")

Вывод: Гольф

EDIT: Подробнее:

Для первой ссылки проанализированная структура HTML будет следующей:

<table>
    <tr>    
        <td></td>
        <td>your_data</td>
        ...
    </tr>
    <tr>    
        <td></td>
        <td>your_data</td>
        ...
    </tr>
    ...
</table>

И ваш XPath работает.

Для второй ссылки есть предшествующий элемент tbody, который содержит элементы tr. Структура такая:

<table>
    <tbody>     
        <tr>    
            <td></td>
            <td>your_data</td>
            ...
        </tr>
        <tr>    
            <td></td>
            <td>your_data</td>
            ...
        </tr>
        ...
    </tbody>
</table>

И ваш XPath не работает. Вот почему вы должны использовать // или объявить элемент tbody в своем выражении:

=IMPORTXML("https://discgolfmetrix.com/?u=scorecard&ID=1172639&view=result","//table[@class='data data-hover']/tbody/tr/td[2]")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...