2017-12-23 28 views
-4

bet365.comからデータを取得したいのですが、問題は、ページソースをダウンロードすると、そのデータがページソースに含まれていないことです。私が検索したように、シングルページアプリケーションでは、すべてがすぐに読み込まれません。私は次のコードを試しましたが、希望のデータを得ることができませんでした。誰も助けることができますか?シングルページのウェブサイトを掻き集める

public string GetGeneratedHTML(string url) 
    { 
     URL = url; 
     Thread t = new Thread(new ThreadStart(WebBrowserThread)); 
     t.SetApartmentState(ApartmentState.STA); 
     t.Start(); 
     t.Join(); 

     return GeneratedSource; 
    } 

    private void WebBrowserThread() 
    { 
     WebBrowser wb = new WebBrowser(); 
     wb.Navigate(URL); 

     wb.DocumentCompleted += 
      new WebBrowserDocumentCompletedEventHandler(
       wb_DocumentCompleted); 

     while (wb.ReadyState != WebBrowserReadyState.Complete) 
      Application.DoEvents(); 

     //Added this line, because the final HTML takes a while to show up 
     GeneratedSource = wb.Document.Body.InnerHtml; 

     wb.Dispose(); 
    }`enter code here` 

    private void wb_DocumentCompleted(object sender, 
     WebBrowserDocumentCompletedEventArgs e) 
    { 
     WebBrowser wb = (WebBrowser)sender; 
     GeneratedSource = wb.Document.Body.InnerHtml; 
    } 
+0

はそうベット365は、コードの一部は、私がサイト上で何を参照してください。また、ページのソースで見つけることができませんでした –

+0

スクレーパーが好きではありません。 –

答えて

0

ブラウザの開発ツールの[ネットワーク]タブを使用して、データを取得するためにどのRESTエンドポイントが呼び出すかを確認します。次に、htmlをスクラップする代わりにエンドポイントを直接呼び出してデータを取得します。

0

遅延イベント/タイマーを設定して、新しいデータ/ htmlの利用可能性を確認することがあります。基本的にwb_DocumentCompletedのように書かれた独自の関数を使用してください。ひどく効率的ではありませんが、非常に正確です。幸運!..

protected System.Timers.Timer MonitorTimer = new System.Timers.Timer(); 
public void Initialize() 
{ 
    MonitorTimer.Elapsed += new ElapsedEventHandler(UpdateEvent); 
    MonitorTimer.Interval = 1000; 
    MonitorTimer.Enabled = true; 
} 
protected object TimerLock = new object(); 
public void UpdateEvent(object source, ElapsedEventArgs e) 
{ 
    lock (TimerLock) 
    { 
     doc = (mshtml.HTMLDocument)wbProfile.Document; 
     // What you are looking for that only appears later. --> 
     if(doc.body.innerHTML.toString().IndexOf("foo") != -1) 
     { 
      // Do something useful.. 
     } 
    } 
} 
関連する問題