我想使用下拉列表中列出的日期从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);
}
}
我想下载上图中显示的数据
答案 0 :(得分:1)
您需要做一些额外的工作来模拟一个帖子,以开始针对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值,并为每个页面模拟其他帖子。