我試圖刮一頁。一切都很好,但是當值更新時,頁面的Sourse代碼在一分鐘內仍然是一樣的。即使當我刷新網頁連接速度較慢的網頁時,首先我會看到舊數據,並且只有在頁面獲得完全加載的值後纔是最新數據。 我想javascript更新它們。它仍然需要以某種方式下載它們。如何在頁面加載後抓取包含使用JavaScript更新的數據的頁面?
如何獲得當前值?
我用C#編寫我的程序,但是如果您有一些想法/建議/示例語言並不重要。
謝謝。
我試圖刮一頁。一切都很好,但是當值更新時,頁面的Sourse代碼在一分鐘內仍然是一樣的。即使當我刷新網頁連接速度較慢的網頁時,首先我會看到舊數據,並且只有在頁面獲得完全加載的值後纔是最新數據。 我想javascript更新它們。它仍然需要以某種方式下載它們。如何在頁面加載後抓取包含使用JavaScript更新的數據的頁面?
如何獲得當前值?
我用C#編寫我的程序,但是如果您有一些想法/建議/示例語言並不重要。
謝謝。
你說得對 - javascript可能在加載後更新數據。
我能想到的三種方式來處理這個問題:
使用WebBrowser控件 - 我想使用HttpWebRequest對象來檢索網站價值的。如果你需要讓javascript運行,這將不起作用。您可以使用webbrowser控件,讓javascript運行並從DOM中檢索值。只有我不喜歡這種方法的感覺就像是黑客攻擊,對於刺激應用程序來說可能太笨重。您還需要知道何時讀取DOM的內容(更新可能在後臺進行)。 Google「C#WebBrowser控件以編程方式讀取DOM」,或者您可以閱讀更多關於here的信息。
我個人比以前更喜歡這個,但它並不是一直工作。首先,你需要從螢火蟲或其他東西檢查網站,看看哪些網址是從後臺調用的。比如說,該網站正在使用JavaScript更新股票報價。最有可能的是,它使用異步請求從Web服務中檢索更新的信息。使用firebug,您可以在NET> XHR下查看它。現在是困難的部分。那麼,請查看請求並返回值。這個想法是,你可以嘗試檢索自己的值並解析其中的內容 - 這比抓取頁面要容易得多。問題是,你需要做一些逆向工程才能做到。您可能還會遇到身份驗證和/或加密問題。
最後,我最喜歡的解決方案是直接詢問您[所在站點的所有者]的所有者。
有一些工具可以通過C#:iMacros Scripting Edition或WatiN自動執行Web瀏覽器。 iMacros更易於使用,但Watin是免費的。兩者都有一個龐大的用戶羣體。
我認爲WebBrowser控件方法可能是好的,不依賴於第三方庫。以下是我打算用它解決了等待頁面完成加載問題:
private string ReadPage(string Link)
{
using (var client = new WebClient())
{
this.wbrwPages.Navigate(Link);
while (this.wbrwPages.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
}
ReadPage = this.wbrwPages.DocumentText;
}
}
我會通過某種形式的DOM或XPath治療的獲取信息了HTML的。我很好奇,如果別人會對進入'while'循環有意見,並且取決於'完成'狀態以使我擺脫困境。我可能會在那裏放一些計時器 - 只是爲了安全起見。
對於Python中的這個問題,請參閱:http://stackoverflow.com/questions/5338979/scraping-a-web-page-with-java-script-in-python – 2011-05-18 17:17:52
謝謝,即時通訊要谷歌這些建議。 – Alena 2011-05-18 17:24:52