C #에서 HtmlAgilityPack을 사용하여 HTML을 구문 분석하려고합니다. 나는 21 tr items
을 가지고 각 tr 항목은 7 td items
. tr 및 td 항목을 모두 순서대로 가져올 수 있습니까? 이제는 tr 아이템 하나와 7 td 아이템 만 얻을 수 있습니다.
여기 내 C # 코드입니다 :
var url = "url";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream());
string sourceCode = sr.ReadToEnd();
HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();
document.LoadHtml(sourceCode);
var name = document.DocumentNode.SelectNodes("//*[@id=\"searchResultsTable\"]/tbody/tr[1]/td[2]/a[1]")[0].InnerText;
var year = document.DocumentNode.SelectNodes("//*[@id=\"searchResultsTable\"]/tbody/tr[1]/td[3]")[0].InnerText;
var km = document.DocumentNode.SelectNodes("//*[@id=\"searchResultsTable\"]/tbody/tr[1]/td[4]")[0].InnerText;
var color = document.DocumentNode.SelectNodes("//*[@id=\"searchResultsTable\"]/tbody/tr[1]/td[5]")[0].InnerText;
var price = document.DocumentNode.SelectNodes("//*[@id=\"searchResultsTable\"]/tbody/tr[1]/td[6]")[0].InnerText;
var date = document.DocumentNode.SelectNodes("//*[@id=\"searchResultsTable\"]/tbody/tr[1]/td[7]")[0].InnerText;
var location = document.DocumentNode.SelectNodes("//*[@id=\"searchResultsTable\"]/tbody/tr[1]/td[8]")[0].InnerText;
나는 [@id=\"searchResultsTable\"]/tbody/tr[1]/td[position()<8]
을 사용하려고 시도했지만 오직 / n만을 반환합니다
아래의 코드를 테스트 해보십시오 (컴파일 오류 가능성은 있지만 아이디어는 제공됩니다).
코드의 주석은 자세한 내용을 제공합니다.
//GET THE TABLE NODE
HtmlNode table = document.DocumentNode.SelectSingleNode("//*[@id='searchResultsTable']");
//LOOP THROUGH THE TABLE NODE AND FIND EACH TR
foreach (HtmlNode row in table.SelectNodes("//tr")) {
//PRINT HERE WHATEVER YOU WANT FOR EACH ROW.
Console.WriteLine("New Row");
//LOOP THROUGH THE ALL TD OF EACH TR
foreach (HtmlNode cell in row.SelectNodes("//td")) {
//PRINT HERE EACH TD
Console.WriteLine("cell: " + cell.InnerText);
} //END TD
}//END TR
위에서 언급 한 것과 비슷하게 tr
요소를 반복하는 선택기로 쿼리 한 다음 행당 고정 위치 td
노드를 선택합니다.
다음과 같은 구조를 가정합니다.
<table id="searchResultsTable">
<tbody>
<tr>
<td>1</td>
<td>Name<a>Name 1</a></td>
<td>Year 1</td>
<td>KM 1</td>
<td>Color 1</td>
<td>Price 1</td>
<td>Date 1</td>
<td>Location 1</td>
</tr>
<tr>
<td>2</td>
<td>Name<a>Name 2</a></td>
<td>Year 2</td>
<td>KM 2</td>
<td>Color 2</td>
<td>Price 2</td>
<td>Date 2</td>
<td>Location 2</td>
</tr>
</tbody>
예:
var document = new HtmlDocument();
document.Load("example.html");
var rows = document.DocumentNode.SelectNodes("//*[@id='searchResultsTable']/tbody/tr");
foreach(var row in rows)
{
var name = row.SelectSingleNode("td[2]/a[1]").InnerText;
var year = row.SelectSingleNode("td[3]").InnerText;
var km = row.SelectSingleNode("td[4]").InnerText;
var color = row.SelectSingleNode("td[5]").InnerText;
var price = row.SelectSingleNode("td[6]").InnerText;
var date = row.SelectSingleNode("td[7]").InnerText;
var location = row.SelectSingleNode("td[8]").InnerText;
Console.WriteLine("{0}, {1}, {2}, {3}, {4}, {5}, {6}", name, year, km, color, price, date, location);
}
생산 :
Name 1, Year 1, KM 1, Color 1, Price 1, Date 1, Location 1
Name 2, Year 2, KM 2, Color 2, Price 2, Date 2, Location 2