HTMLAgility Pack:スクリーンスクレイピングクラス名のハイフンでDivを見つけることができませんか?

c# html-agility-pack screen-scraping

質問

これは学習練習の一種ですが、「楽しい」ものです。基本的には、C#コンソールアプリケーションで「Balcony」状態の部屋の価格(現在は$ 1039)の価格を解析しようとしています。 URLは次のとおりです。

http://www.carnival.com/BookingEngine/Stateroom/Stateroom2/?embkCode=PCV&itinCode=SC0&durDays=8&shipCode=SH&subRegionCode=CS&sailDate=08082015&sailingID=68791&numGuests=2&showDbl=False&isOver55=N&isPastGuest=N&stateCode=&isMilitary=N&evsel=&be_version=1

私は上記のURLを正常にロードされている:

var document = getHtmlWeb.Load(web_address);

Balconyの価格のコンテナは、 ' col 'のクラスを持つdivで、 column-container clearfixクラスの3番目のdivです。私はクラスごとにすべてのdivを細かくする必要があると思った:

var document = getHtmlWeb.Load(web_address);

3番目のノードを選択してBalconyの価格を取得します。しかし、lowest_price変数はnullを返し続けます。私は、ドキュメント自体がロードされていることを知っていると私は「内部を見ることができcol私は」を選択した場合「 col 」。それは、そのdivの発見を妨げているcol-bottomのハイフンですか?

他の方法でこれにアクセスするには?私が言ったように、それは主に学習の練習です。しかし、私は画面スクレイピングを必要とするカスタム監視ソリューションを作成しなければならないので、それだけで楽しいものではありません。

ありがとう!

関連情報を含むHTMLスニペットを編集

var document = getHtmlWeb.Load(web_address);

人気のある回答

有効なhtmlのatrributeの名前または値のハイフンで何も間違っていません。あなたのソースの問題は、htmlをレンダリングするためにクライアントでjavascriptを使用し、htmlページをダウンロードできることを確認することです。探しているものは存在しない。

最初にjavascriptを実行する必要があるページを解析するには、Webブラウザコントロールを使用してhtmlをHAPに渡すことができます。

WinForms Webブラウザコントロールの使い方の簡単な例を次に示します。

private void ParseSomeHtmlThatRenderedJavascript(){
        var browser = new System.Windows.Forms.WebBrowser() { ScriptErrorsSuppressed = true };

        string link = "yourLinkHere";

        //This will be called when the web page loads, it better be a class member since this is just a simple demonstration
        WebBrowserDocumentCompletedEventHandler onDocumentCompleted = new WebBrowserDocumentCompletedEventHandler((s, evt) => {
            //Do your HtmlParsingHere
            var doc = new HtmlAgilityPack.HtmlDocument();
            doc.LoadHtml(browser.DocumentText);
            var someNode = doc.DocumentNode.SelectNodes("yourxpathHere");
        });

        //subscribe to the DocumentCompleted event using our above handler before navigating
        browser.DocumentCompleted += onDocumentCompleted;

        browser.Navigate(link);
    }

また、 Awesomiumと他の組み込みのWebブラウザコントロールを見ることもできます。

また、コンソールアプリケーションでWebBrowserを実行したい場合は、ここにサンプルがあります。これは、Windowsフォームを使用していないと、このサンプルは、このようにして、新しいスレッドのWebBrowserコントロールに役立ちます。

private void ParseSomeHtmlThatRenderedJavascript(){
        var browser = new System.Windows.Forms.WebBrowser() { ScriptErrorsSuppressed = true };

        string link = "yourLinkHere";

        //This will be called when the web page loads, it better be a class member since this is just a simple demonstration
        WebBrowserDocumentCompletedEventHandler onDocumentCompleted = new WebBrowserDocumentCompletedEventHandler((s, evt) => {
            //Do your HtmlParsingHere
            var doc = new HtmlAgilityPack.HtmlDocument();
            doc.LoadHtml(browser.DocumentText);
            var someNode = doc.DocumentNode.SelectNodes("yourxpathHere");
        });

        //subscribe to the DocumentCompleted event using our above handler before navigating
        browser.DocumentCompleted += onDocumentCompleted;

        browser.Navigate(link);
    }



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ