0

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;
    }
}
4

1 に答える 1

0

セレクターのドットは、findAll()タグ クラスを示します。ただし、あなたの場合、「画面」と「コンテンツ」はシャープ(#)で選択できる要素IDです。したがって、次のセレクターが機能するはずです

.findAll("html body div#screen div#content table");
.findAll("#content table");
于 2015-09-06T18:47:14.523 に答える