Доступ к HTML-таблице, полученной с помощью QNetworkReply

Я хочу прочитать суффикс столбца таблицы, которую я вижу на http://finance.yahoo.com/exchanges.

Я читаю страницу с QNetworkManager, хранение данных в QNetworkReply *reply, Если я прочитал всю страницу с reply->readAll() Я получаю страницу, поэтому она восстановлена ​​правильно. Я установил это внутри QWebPage а затем я хочу получить все таблицы, которые находятся внутри.

Для того, чтобы получить таблицу, которую я хочу использовать QWebElement но я не смогу это прочитать. Я читаю все таблицы на том же уровне, что я хочу, но QWebElementCollection что я получаю, пусто.

Что я делаю неправильно и что я должен сделать, чтобы прочитать таблицу?

void getMarketListFromReply(QNetworkReply *reply) {
std::cout << "Reading page" << std::endl;
const QString html(reply->readAll()); // html contain the code
QWebPage page;
std::cout << "Setting page." << std::endl;
page.mainFrame()->setHtml(html);
std::cout << "Retrieving tables" << std::endl;
QWebElementCollection tables = page.mainFrame()->documentElement().findAll("html body div.screen div.content table");
const int size = tables.count();  // size it's 0 :-(
std::cout << "size: " << size << std::endl;
for (int i = 0; i < size; i++) {
std::cout << i << ": " << tables.at(i).toPlainText().toStdString() << std::endl;
}
}

0

Решение

Точка в findAll() Селектор обозначает класс тега. Тем не менее, в вашем случае «экран» и «контент» — это идентификаторы элементов, которые можно выбрать резким (#). Итак, следующие селекторы должны работать

.findAll("html body div#screen div#content table");
.findAll("#content table");
0

Другие решения


По вопросам рекламы [email protected]