2017-01-05 3 views
1

スパムタグがHtmlソースコードに格納された別の映画のIMDB評価を取得したいと思います。そのために、私はHTMLのスパンタグからデータを収集するためにHtml解析を使用しようとしています。 nullを返すDocumentNodeのSelectNodes()メソッドが呼び出されるまで、すべてうまくいきます。DocumentNode.SelectNodesがnullを返す - HtmlAgilityPack

私はこの質問が何度も聞かれてきたことは知っていますが、多くの研究を行いながらさまざまなソリューションを試していますが、私のコードに何が間違っているのか分からないようです。私の学期のプロジェクトを完成させるために、この問題を解決することが本当に重要です。どんな種類の助力もありがたいです。おかげさまで

string url = "https://www.google.com/search?client=opera&q=into+the+wild&sourceid=opera&ie=UTF-8&oe=UTF-8"; 

     StreamReader sourceCode = makeHttpRequest(url); 
     //makeRequest() returns the html source code of the url 
     String sourceCodeString = sourceCode.ReadToEnd(); 

     HtmlDocument doc = new HtmlDocument(); 
     doc.LoadHtml(sourceCodeString); 
     var itemList = doc.DocumentNode.SelectNodes("//span[@class='_tvg']") 
       .Select(p => p.InnerText) 
       .ToList(); 

答えて

1

ここでのキーポイントは、ユーザーエージェントを設定しています。

コードの下

、3件の結果を返しますがUser-Agentを削除する場合は、NULL値を取得します...

using (var client = new HttpClient()) 
{ 
    client.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"); 
    var html = await client.GetStringAsync("https://www.google.com/search?client=opera&q=into+the+wild&sourceid=opera&ie=UTF-8&oe=UTF-8"); 
    var doc = new HtmlAgilityPack.HtmlDocument(); 
    doc.LoadHtml(html); 
    var result = doc.DocumentNode 
        .SelectNodes("//span[@class='_tvg']") 
        .Select(p => p.InnerText) 
        .ToList(); 


} 
+0

I「は、上記のコードを使用しますが文の後 VARのhtml =(client.GetStringAsyncを待っていました"); プログラムは終了し(例外をスローせずに)、残りのステートメントは実行されません。この理由を説明していただけますか? –

+0

@KhursandShakeel空のwinformsプロジェクトを作成して* Form_Load *にこのコードを貼り付けて、もう一度やり直してください(メソッドを非同期としてマークすることを忘れないでください)。BTW:try/catchブロックを使用したい場合があります... –

+0

メソッドをasyncで実行し、try/catchブロックを実行しますが、まだ成功しません。 BTW私はwinformsアプリケーションで作業したことがないので、Windowsフォームアプリケーションの代わりにコンソールアプリケーションで作業しています。コンソールアプリケーションではできませんか? –