2010-06-01 25 views
3

我經常去一個網站看看東西。我心想:「等一下,我可以編程,爲什麼我可以手動去這個站點,我可以編寫一個能幫我做的軟件?」。獲取通過AJAX在webclient生成的html

所以我開始了。我使用C#,所以我找到了WebClient和Uri。

我已經設法得到該網站的源代碼,但問題發生在我查找的具體數據是通過AJAX生成的,源代碼加載後。

這就是我的問題。如果需要首先通過AJAX調用請求,我該如何獲得該代碼?

回答

2

一般的做法是這樣的:

  1. 使用的工具,像Fiddler,找出哪些HTTP請求由瀏覽器以獲取您正在尋找的數據所做的。
  2. 使用WebClient來獲取您需要的HTTP請求。

查看我對this question的回答,獲取更多關於HTML屏幕抓取的信息以獲取更多詳細信息以及如何解決可能遇到的各種問題。

對於上述#1,這裏是如何使用小提琴手,以瞭解具體的要求正在製作:

首先,找到你所關心的(其中包含了在它的響應所需的數據的請求)的請求。您可以通過在提琴手的左窗格中雙擊並查看右下方的「文本框」選項卡來檢查每個請求來執行此操作。您也可以使用CTRL + F在多個請求中查找內容,但某些請求被壓縮,因此如果您希望確保可以使用文本編輯功能,則需要確保在提出請求之前在工具欄中選擇「自動編碼」按鈕,搜索所有這些。

找到所需的請求後,在Fiddler中雙擊它並選擇右上方窗格中的「標題」選項卡。這些是被髮送的標題。如果您的客戶端正好將這些標頭髮送到服務器,則應該返回相同的數據。但通常不是所有的標題都需要,所以你需要弄清楚哪些是需要的。您可以使用右上方窗格中的Fiddler的「請求構建器」選項卡執行此操作。選擇該選項卡並將數據請求從左側窗格拖到請求構建器上。然後提交請求以驗證它是否返回正確的結果。然後開始刪除標題,一次一個標題,直到請求停止工作 - 您知道該標題是必需的。嘗試刪除每個標題,直到找到所需的標題。

然後,您需要編寫代碼來生成正確的標題。不要擔心Host:標題,它會自動爲您生成。對於Cookie:標題,您需要使用CookieContainer類生成它。對於其他頭文件(例如UserAgent :, Accept :,等等,你可以通常複製它們並將它們按照原樣添加到你的請求中)。

+0

我不太理解,Fiddler只顯示1個請求,那就是POST請求我沒有看到數據是如何被請求的,也沒有出現頭文件,它應該是什麼樣子? – KdgDev 2010-06-04 03:34:00

+0

我假設你正在討論的POST實際上包含你正在嘗試的數據以編程方式提取,如果是的話,我擴大了我的答案,包括更多關於如何使用fiddler找到正確的請求,瞭解哪些頭正在發送,並找到哪些頭是必需的詳細信息。 ? – 2010-06-05 03:35:59

+0

好的,我得到了我需要的東西。只有CookieContainer的事情仍然是一個謎。我查了一下,但大多數教程都是關於ASP.NET的。我爲此使用了一個小型C#應用程序,而不是ASP.NET – KdgDev 2010-06-05 13:59:00

相關問題