VS2017
在VS2017中新建项目,并选择建立Windows窗体应用(用于作Windows测试实例),如下图:
在测试项目中添加新建项,并选择Windows窗体,如下图:
在C#的应用程序的主入口中,输入以下代码: Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1());
分析我们所要爬取的页面结构,在本实例中我们所要爬取网页中的table表格样式,如下图所示:
在上面所建立的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
在窗体界面添加一个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); } } }
编码完成,执行本程序,并点击“获取数据”抓取效果如下: