多语言展示
当前在线:653今日阅读:23今日分享:25

怎么用C#爬虫解析table表格样式的网站?

用C#爬虫,访问网页解析table表格,并通过自定义的方式保存下来;这里将通过一个C#小程序,实现爬取一份网站船期表信息,希望能给大家一些帮助与启发。
工具/原料

VS2017

方法/步骤
1

在VS2017中新建项目,并选择建立Windows窗体应用(用于作Windows测试实例),如下图:

2

在测试项目中添加新建项,并选择Windows窗体,如下图:

3

在C#的应用程序的主入口中,输入以下代码:            Application.EnableVisualStyles();            Application.SetCompatibleTextRenderingDefault(false);            Application.Run(new Form1());

4

分析我们所要爬取的页面结构,在本实例中我们所要爬取网页中的table表格样式,如下图所示:

5

在上面所建立的Windows窗体中,初始化代码页中添加以下代码:            dt.Columns.Add("航线名称", System.Type.GetType("System.String"));            dt.Columns.Add("起运港", System.Type.GetType("System.String"));            dt.Columns.Add("目的港", System.Type.GetType("System.String"));            dt.Columns.Add("挂靠港", System.Type.GetType("System.String"));            dt.Columns.Add("承运人", System.Type.GetType("System.String"));            dt.Columns.Add("来源", System.Type.GetType("System.String"));            web.Url = new System.Uri("http://www.chinaports.com/chuanqibiao/");//要爬取的网页URL

6

在窗体界面添加一个Button,并定义以下代码: HtmlDocument doc = web.Document;            HtmlElementCollection tbs = doc.GetElementsByTagName("TABLE");//找到table标签            foreach (HtmlElement tb in tbs)//遍历            {                HtmlElementCollection trs = tb.GetElementsByTagName("TR");//每行                foreach (HtmlElement tr in trs)                {                    HtmlElementCollection tds = tr.GetElementsByTagName("TD");//每列                    if (tds.Count > 0)                    {                        DataRow dr = dt.NewRow();                        for (int i = 0; i < tds.Count; i++)                        {                            //找到需要的信息列,并将对应的信息填充到dr                            dr["航线名称"] = tds[0].InnerText;                            dr["起运港"] = tds[1].InnerText;                            dr["目的港"] = tds[2].InnerText;                            dr["挂靠港"] = tds[3].InnerText;                            dr["承运人"] = tds[4].InnerText;                            dr["来源"] = tds[5].InnerText;                          }                        //将dataReader读取的每一行数据保存到datatable中                        dt.Rows.Add(dr);                    }                }            }

7

编码完成,执行本程序,并点击“获取数据”抓取效果如下:

推荐信息