Читать HTML-таблицу с пандами в Python - PullRequest
0 голосов
/ 23 мая 2018

Я скребу таблицы с этого сайта http://www.nowgoal.com/analysis/1514180.html (если вы нажмете и совпадение уже прошло, с сайта Nowgoal вы можете получить любое другое совпадение с такой же структурой.

На этой странице есть несколько таблиц, и до сих пор мой код, который работал, был следующим:

name='Head to Head Statistics'
tabla=WebDriverWait(browser,10).until(
    EC.presence_of_element_located((By.XPATH,'''//tbody[descendant::*
    [contains(text(),"{}")]]'''.format(name))))

tablas=pd.read_html(tabla.get_attribute('outerHTML'),header=0,skiprows=(0,2))[0]

Там, где я уже оптимизировал его, добавляя заголовок и пропуская строки. Проблема в том, когда я пробую таблицу с name='Live Odds Comparison' Я получаю следующую ошибку при попытке прочитать html с помощью pandas

>>ValueError: No tables found

Я немного отладил, и атрибут externalHTML работает нормально и печатает то, что должен, но ни то, ни другое с использованием innerHTML не возвращает таблицу каккак и с другими. Что происходит?

1 Ответ

0 голосов
/ 23 мая 2018

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

tabla=WebDriverWait(browser,10).until(
EC.presence_of_element_located((By.XPATH,'''//div[contains(@id,"liveCompareDiv") and descendant::*
[contains(text(),"{}")]]'''.format(name))))

Таким образом, вы найдете таблицу, которую я искал.Я полагаю, что внутренний код узла tbody отличается от одной таблицы к другой, и это создает дикое поведение.

Правка, потому что теперь я знаю почему, я думаю.После tbody в работавших таблицах есть два узла tr, один из которых содержит заголовок, а другой - данные.В этой таблице, хотя все еще есть узел tr, содержащий заголовок, второго, содержащего данные, нет, и все строки не содержатся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...