[英]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.