HTML 페이지를 구문 분석하기 위해 HtmlAgility 팩을 사용하고 있습니다. 내 구역을 어디에서 data.Actually 얻을 테이블에서 찾을 수 오전 및 해당 tr 구문 분석해야합니다. 기본적으로 두 가지 쿼리가 있습니다.
파서에서 페이지를로드 할 때 메모리에로드하는 데 약 20 ~ 30 초가 걸렸으며 구문 분석 할 약 4738 개의 웹 페이지가 있습니다. 그래서 그것을 줄이고 싶습니다 .... 알고 싶습니다 대리인이 루프에서 메서드를 호출하여 지연 시간을 줄일 수 있습니까? 또는 그렇게하는 효율적인 방법이 있습니까? 저를 통해 저를 인도하십시오.
"\r\n\t\t\t\t<td style=\"width:20%;\">110001</td><td style=\"width:25%;\">New Delhi</td><td style=\"width:25%;\">Delhi</td><td style=\"width:30%;\">Baroda House</td>\r\n\t\t\t"
, 위에서 11001, 뉴 델리, 델리 및 Baroda 하우스를 구문 분석해야합니다. 사실 나는 Pincode, Area, State and District 속성을 가지고있는 Pincodes 클래스를 가지고 있습니다. 그래서 정규 표현식이나 클래스에 이러한 값을 넣어 어떤 방법이 필요합니다.
마지막으로 Linq2Sql을 사용하고있는 데이터베이스에이 레코드를 푸시해야합니다. 그래서 모든 것을 지키면서 나에게 해결책을 알려주세요. 모든 참조 또는 링크는 큰 도움이 될 것입니다.
내 코드 :
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, 패턴 또는 다른 패턴에 패턴이있는 것 같지 않습니다. 그것은 잘못 설계되었습니다. 결과에 대한 다른 페이지 번호와 같은 멋진 패턴이있는 경우이 작업을 병렬로 수행 할 수 있습니다. 이후로는 다음 페이지로 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;
}
}