在WinForm中解析html页面,C#
我正在使用HtmlAgility包解析html页面。我可以从我需要获取数据的地方找到我的部分。实际上它是一个表,我必须解析它的tr。 基本上,我有两个问题在WinForm中解析html页面,C#,c#,winforms,linq-to-sql,html-parsing,html-agility-pack,C#,Winforms,Linq To Sql,Html Parsing,Html Agility Pack,我正在使用HtmlAgility包解析html页面。我可以从我需要获取数据的地方找到我的部分。实际上它是一个表,我必须解析它的tr。 基本上,我有两个问题 当我在解析器中加载一个页面时,将其加载到内存中大约需要20-30秒,需要解析的网页大约有4738个。所以,我想减少它…我想知道我可以在循环中使用委托调用方法,这样我可以减少延迟时间。或者是否有任何有效的方法来做到这一点。请引导我通过那个 我的行是“\r\n\t\t\t\t110001New DelhiDelhiBaroda House\r\n
“\r\n\t\t\t\t110001New DelhiDelhiBaroda House\r\n\t\t\t”
,从上面我必须解析11001,新德里,德里和巴罗达House。实际上我有一个类Pincodes,其中我有Pincode、Area、State和District属性。所以我需要一个正则表达式或某种方法来将这些值放到类中 var url = @"http://www.eximguru.com/traderesources/pincode.aspx?&GridInfo=Pincode01";
var web = new HtmlWeb();
var doc = web.Load(url);
//doc.DocumentNode.SelectSingleNode("//*[@id=\"lst-ib\"]");//("/html/body/div[2]/form/div/div[2]/table/tbody/tr/td/table/tbody/tr/td/div/table/tbody/tr/td/table/tbody/tr/td[2]/div/input");
//System.Console.WriteLine(doc.DocumentNode.SelectSingleNode("//*[@id=\"lst-ib\"]").Id);
var htmlNode =
doc.DocumentNode.SelectSingleNode(
"//*[@id=\"ctl00_uxContentPlaceHolder_ResourceAndGuideUserControl1_ResourceAndGuideGrid_myGridView_mainGridView\"]");
提前感谢页面上的URL、ID或其他任何内容看起来都没有模式。它设计得很差。如果有一个很好的模式(比如结果的不同页码),那么这可能可以并行完成。因为它不是,所以您必须按顺序执行,因为没有可靠的方法(我可以看到)将url获取到下一页
var url = "http://eximguru.com/traderesources/pincode.aspx?&GridInfo=Pincode01";
var web = new HtmlWeb();
var results = new List<Pincode>();
while (!String.IsNullOrWhiteSpace(url))
{
var doc = web.Load(url);
var query = doc.DocumentNode
.SelectNodes("//div[@class='Search']/div[3]//tr")
.Skip(1)
.Select(row => row.SelectNodes("td"))
.Select(row => new Pincode
{
PinCode = row[0].InnerText,
District = row[1].InnerText,
State = row[2].InnerText,
Area = row[3].InnerText,
});
results.AddRange(query);
var next = doc.DocumentNode
.SelectSingleNode("//div[@class='slistFooter']//a[last()]");
if (next != null && next.InnerText == "Next")
{
url = next.Attributes["href"].Value;
}
else
{
url = null;
}
}
var url=”http://eximguru.com/traderesources/pincode.aspx?&GridInfo=Pincode01";
var web=新的HtmlWeb();
var results=新列表();
而(!String.IsNullOrWhiteSpace(url))
{
var doc=web.Load(url);
var query=doc.DocumentNode
.SelectNodes(“//div[@class='Search']/div[3]//tr”)
.Skip(1)
.Select(row=>row.SelectNodes(“td”))
.选择(行=>新Pincode
{
PinCode=行[0]。InnerText,
District=行[1]。InnerText,
状态=行[2]。InnerText,
区域=行[3]。InnerText,
});
results.AddRange(查询);
var next=doc.DocumentNode
.SelectSingleNode(“//div[@class='slistFooter']//a[last()]”);
if(next!=null&&next.InnerText==“next”)
{
url=next.Attributes[“href”].Value;
}
其他的
{
url=null;
}
}