簡體   English   中英

如何使用Webclient / HttpClient以編程方式獲取數據?

[英]How to get the data programatically using Webclient / HttpClient?

在此處輸入圖片說明

我想使用下拉列表中列出的日期從https://eauction.ccmc.gov.in/frm_scduled_items.aspx下載數據。

    private async Task Cbetest()
    {
        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri("https://eauction.ccmc.gov.in");
            var content = new FormUrlEncodedContent(new[]
        {
            new KeyValuePair<string, string>("ctl00$ContentPlaceHolder1$gridedit$ctl14$ctl02","17/02/2016")
        });
            var result = await client.PostAsync("/frm_scduled_items.aspx", content);
            string resultContent = await result.Content.ReadAsStringAsync();
            Console.WriteLine(resultContent);
        }
    }

我想下載上圖中顯示的數據

您需要做一些額外的工作來模擬帖子,以開始針對ASP.NET WebForms應用程序進行抓取。 通常,您將需要傳遞有效的ViewState和EventValidation參數,您可以從初始GET請求中檢索這些參數。

我正在使用HTML Agility Pack來簡化初始響應的解析,如果您打算抓取HTML,建議您仔細閱讀一下。

以下內容似乎可以得到您想要的結果,盡管我對響應HTML的了解還不是很深。

using(var client = new HttpClient())
{
    client.BaseAddress = new Uri("https://eauction.ccmc.gov.in");

    var initial = await client.GetAsync("/frm_scduled_items.aspx");

    var initialContent = await initial.Content.ReadAsStringAsync();

    var htmlDoc = new HtmlDocument();

    htmlDoc.LoadHtml(initialContent);

    var viewState = htmlDoc.DocumentNode.SelectSingleNode("//input[@id='__VIEWSTATE']").GetAttributeValue("value", string.Empty);
    var eventValidation = htmlDoc.DocumentNode.SelectSingleNode("//input[@id='__EVENTVALIDATION']").GetAttributeValue("value", string.Empty);

    var content = new FormUrlEncodedContent(new Dictionary<string, string>{
        {"__VIEWSTATE", viewState},
        {"__EVENTVALIDATION", eventValidation},
        {"ctl00$ContentPlaceHolder1$drp_auction_date", "17/02/2016"}
    });

    var res = await client.PostAsync("/frm_scduled_items.aspx", content);

    var resContent = await res.Content.ReadAsStringAsync();

    Console.WriteLine(resContent);
}

從那里,您將需要解析結果表以獲得有用的信息。 如果要在DataGrid的頁面中進行爬網,則需要獲取更新的EventValidation和ViewState值,並模擬每個頁面的其他帖子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM