• c#使用 HtmlAgilityPack来进行抓取和解析来获得table表格信息


    项目上要用到抓取网页,最后选用了HtmlAgilityPack来进行。

    官网地址:https://html-agility-pack.net/,可以看一下

    基础的:

    // From File
    var doc = new HtmlDocument();
    doc.Load(filePath);
    
    // From String
    var doc = new HtmlDocument();
    doc.LoadHtml(html);
    
    // From Web
    var url = "http://html-agility-pack.net/";
    var web = new HtmlWeb();
    var doc = web.Load(url);
    我要实现抓取某一个table的信息,
    官方代码如下:
    HtmlDocument doc = new HtmlDocument();
    doc.LoadHtml(@"<html><body><p><table id=""foo""><tr><th>hello</th></tr><tr><td>world</td></tr></table></body></html>");
    foreach (HtmlNode table in doc.DocumentNode.SelectNodes("//table")) {
        Console.WriteLine("Found: " + table.Id);
        foreach (HtmlNode row in table.SelectNodes("tr")) {
            Console.WriteLine("row");
            foreach (HtmlNode cell in row.SelectNodes("th|td")) {
                Console.WriteLine("cell: " + cell.InnerText);
            }
        }
    }

    这个例子是可以跑成功的,但是当我实际应用的时候会发现 

    table.SelectNodes("tr") 获取的值为null,经查找发现是路径解析的问题,因为我获取的html为
    <table cellpadding="0" cellspacing="0" class="" width="100%">
                    <thead>
                        <tr class="cantchoose">
                            <th width="10%">承运人</th>
                            <th width="15%">航线名称</th>
                            <th width="10%">起运港</th>
                            <th width="10%">目的港</th>
                            <th width="54%">挂靠港</th>
                        </tr>
                    </thead>
                    <tbody>
                    
                        <tr>
                            
                            <td title="ANL(澳航)">ANL(澳航)</td>
                            <td title="Austrilian and Zelanian Line">
                                
                                    <a target="_blank" href="/chuanqibiao/company/shipline/74181">Austrilian and Zelanian Line</a>
                                
                                
                            </td>
                            <td title="YOKOHAMA">YOKOHAMA</td>
                            <td title="BRISBANE">BRISBANE</td>
                            <td title="YOKOHAMA-OSAKA-BUSAN-QINGDAO-SHANGHAI-NINGBO-XIAMEN-HONGKONG-KAOHSIUNG-MELBOURNE-SYDNEY-BRISBANE">YOKOHAMA-OSAKA-BUSAN-QINGDAO-SHANGHAI-NINGBO-XIAMEN-HONGKONG-KAOHSIUNG-MELBOURNE-SYDNEY-BRISBANE</td>
                        </tr>
                    
                        <tr>
                            
                            <td title="ANL(澳航)">ANL(澳航)</td>
                            <td title="Austrilian and Zelanian Line">
                                
                                    <a target="_blank" href="/chuanqibiao/company/shipline/74178">Austrilian and Zelanian Line</a>
                                
                                
                            </td>
                            <td title="YOKOHAMA">YOKOHAMA</td>
                            <td title="BRISBANE">BRISBANE</td>
                            <td title="YOKOHAMA-OSAKA-BUSAN-QINGDAO-SHANGHAI-NINGBO-XIAMEN-HONGKONG-KAOHSIUNG-MELBOURNE-SYDNEY-BRISBANE">YOKOHAMA-OSAKA-BUSAN-QINGDAO-SHANGHAI-NINGBO-XIAMEN-HONGKONG-KAOHSIUNG-MELBOURNE-SYDNEY-BRISBANE</td>
                        </tr>
                     </tbody>
                </table>

    当前第一个tr的xml路径为:/html[1]/body[1]/div[3]/div[3]/div[1]/table[1]/thead[1]/tr,最后 修改为:

    table.SelectNodes(".//tr") 就可以解析这个table下面的所有tr信息,
    当使用
    table.SelectNodes("//tr")时,获取的是当前html的全部tr,如果当有两个table时候,会获取到两个table全部的tr信息,用哪个要分情况 
  • 相关阅读:
    BZOJ 3881: [Coci2015]Divljak
    BZOJ 2434: [Noi2011]阿狸的打字机
    BZOJ 2580: [Usaco2012 Jan]Video Game
    BZOJ 3940: [Usaco2015 Feb]Censoring
    BZOJ 3942: [Usaco2015 Feb]Censoring
    PTA L2-002 链表去重 团体程序设计天梯赛-练习集
    PTA L2-001 紧急救援-最短路(Dijkstra)多条最短路找最优解并输出路径 团体程序设计天梯赛-练习集
    PTA L1-020 帅到没朋友 团体程序设计天梯赛-练习集
    Codeforces 429 B. Working out-dp( Codeforces Round #245 (Div. 1))
    HDU 6467.简单数学题-数学题 (“字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛)
  • 原文地址:https://www.cnblogs.com/fishyues/p/10232822.html
Copyright © 2020-2023  润新知