网页表格抓取(一个如何解决三个问题?是怎么爬,第二个的数据如何保存 )
优采云 发布时间: 2022-03-17 19:12网页表格抓取(一个如何解决三个问题?是怎么爬,第二个的数据如何保存
)
所谓爬虫,无非就是通过一些特定的程序,访问一些你想访问的网页,并以自定义的方式保存网页上的内容。
这里我们将使用一个C#小程序,对上交所50个手指的实时信息进行爬取。该程序非常简单。
所谓爬虫就是要解决三个问题:一是爬什么,二是怎么爬,三是爬下来的数据怎么保存。根据个人需要和能力水平,方法有很多。
下面,我们将通过具体的例子来说明如何解决上述三个问题。
一、爬什么
你可以抓取任何你想要的数据,但是这些数据是如何在网页中表示和存储的呢?这时候就需要分析我们要爬取的页面的结构了。
在这个例子中,我们要爬取网页中的表格,如下图所示:
下面通过具体代码来说明:
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;
dr["换手率"] = tds[13].InnerText;
}
//将dataReader读取的每一行数据保存到datatable中
dt.Rows.Add(dr);
}
}
最后在Form_load中添加如下代码:
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"));
dt.Columns.Add("换手率", System.Type.GetType("System.String"));
web.Url = new System.Uri("http://q.10jqka.com.cn/stock/zs/sz50/");//要爬取的网页URL
最终结果如下所示: