. 테이블에서 데이터를 가져 오는 방법을 모르는 것으로 가정합니다. xpaths를 찾아야합니다.
public static void Main(string[] args)
{
HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.manualslib.com/brand/A.html");
request.Method = "GET";
request.ContentType = "text/html;charset=utf-8";
using (var response = (HttpWebResponse)request.GetResponse())
{
using (var stream = response.GetResponseStream())
{
doc.Load(stream, Encoding.GetEncoding("utf-8"));
}
}
}
catch (WebException ex)
{
Console.WriteLine(ex.Message);
}
//Works fine
HtmlNode tablebody = doc.DocumentNode.SelectSingleNode("//table[contains(@class, 'table')]/tbody");
foreach(HtmlNode tr in tablebody.SelectNodes("./tr"))
{
Console.WriteLine("\nTableRow: ");
foreach(HtmlNode td in tr.SelectNodes("./td"))
{
if (td.GetAttributeValue("class", "null") == "col1")
{
Console.Write("\t " + td.InnerText);
}
else
{
HtmlNode temp = td.SelectSingleNode(".//div[@class='catel']/a");
if (temp != null)
{
Console.Write("\t " + temp.GetAttributeValue("href", "no url"));
}
}
}
}
Console.ReadKey();
}
먼저 우리는 XPath의 노드, TBODY로 이동하지만, 경우에만 테이블에있는 클래스의 속성은 '테이블'이 포함되어
//table[contains(@class, 'table')]/tbody
이제 우리는 그럴라고 모든 노드를 선택합니다 (테이블 행) :
도트
./tr 여기에 우리가 모든 TR-노드를 찾을 것 갈의 현재 상황에서 우리가 걸 의미한다. 그런 다음 각 TR-노드에서 우리는 함께 모든 TD-노드를 찾을려고하고있다 :
각 테이블 셀 지금
을 ./td 우리가 데이터를 얻을 싶어요. 첫 번째 td에서는 class-attribute가 'col1'과 동일하다는 것을 알 수 있습니다. 그래서 td가 그 값을 가진 클래스를 포함한다면 - 우리는 그 td-node 안에 텍스트를 가져 가고 싶습니다.
그러나 해당 특성이 포함되어 있지 않은 경우 'catel'값을 가진 class-attribute가있는 div 안에있는 앵커 태그를 원한다는 것을 알고 있습니다.
그 앵커 태그 안에 href 속성의 값을 원합니다.
올바르게 작동합니다 (NuGet HtmlAgilityPack 1.6.5 사용) :'nodes'는 1 개의 테이블 요소를 포함합니다. HTML 코드를'document'에 올바르게로드 했습니까? 전체 소스 코드를 제공 할 수 있습니까? –