从统计局抓取最新的全国区县数据!!

Posted 东方游人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从统计局抓取最新的全国区县数据!!相关的知识,希望对你有一定的参考价值。

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using htmlAgilityPack;
using System.Text;
public partial class 抓取区县 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        string Url = "http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2015/index.html";
        HtmlWeb hw = new HtmlWeb();
        hw.OverrideEncoding = System.Text.Encoding.GetEncoding("GB2312");
        HtmlDocument doc = hw.Load(Url); 
        doc.OptionReadEncoding = true;



        StringBuilder sb = new StringBuilder();
        HtmlNodeCollection hrefList = doc.DocumentNode.SelectNodes(".//a[@href]");

        if (hrefList != null)
        {
            foreach (HtmlNode href in hrefList)
            {
                int dep = 1;//深度

                HtmlAttribute att = href.Attributes["href"];

                if (att.Value.Contains("miibeian"))//去除备案
                    continue;

                string depurl = Url.Replace("index.html", att.Value);

                Response.Write(href.InnerText + "(" + att.Value.Replace(".html","").PadRight(12, \'0\') + ")<br/>");// +
                GetArea(depurl, dep, att.Value.Replace(".html", "").PadRight(12, \'0\'));

               // break;
            }

        }

      //  GetArea("http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2015/14/1401.html",2);
    }


    /// <summary>
    /// 递归读取方法
    /// </summary>
    /// <param name="Url">下级地址</param>
    /// <param name="dep">下级深度</param>
    /// <param name="parentCode">上级代码</param>
    void GetArea(string Url, int dep, string parentCode)
    {
        //递归读取方法

 
           
        HtmlWeb hw = new HtmlWeb();
        hw.OverrideEncoding = System.Text.Encoding.GetEncoding("GB2312");
        HtmlDocument doc = hw.Load(Url);//是你需要解析的url
        doc.OptionReadEncoding = true;

        dep++;
        StringBuilder sb = new StringBuilder();
        HtmlNodeCollection hrefList = doc.DocumentNode.SelectNodes(".//tr[@class=\'" + classname(dep) + "\']/td[last()]");

        if (hrefList != null)
        {
           
            foreach (HtmlNode href in hrefList)
            {
                 
                HtmlNodeCollection hrefNode = href.SelectNodes(".//a[@href]");
                if (hrefNode != null)//链接存在
                {
                    HtmlAttribute att = hrefNode[0].Attributes["href"];

                    if (att.Value.Contains("miibeian"))//去除备案
                        continue;

                    string codeNum = href.PreviousSibling.InnerText.PadRight(12, \'0\');
                    Response.Write(joinstr(dep) + href.InnerText + "(" + codeNum + ")<br/>");

                    string depurl = Url.Replace(parentCode.Substring(0, 2 * (dep-1)) + ".html", att.Value);
                    if(dep<4)//到乡镇即可
                    GetArea(depurl, dep, codeNum);
                }
                else
                {
                    Response.Write(joinstr(dep) + href.InnerText + "(" + href.PreviousSibling.InnerText.PadRight(12, \'0\') + ")<br/>");
                }
            }

        }


    }

    /// <summary>
    /// 分级连接符
    /// </summary>
    /// <param name="dep"></param>
    /// <returns></returns>
    string joinstr(int dep)
    {
        string str = "";
        for (int i = 1; i < dep; i++)
        {
            str += "-----|";
        }
        return str;
 
    }
    /// <summary>
    /// 不同级别不同的class名称
    /// </summary>
    /// <param name="dep"></param>
    /// <returns></returns>
    string classname(int dep)
    {
        string str = "";
        switch (dep)

        {
            case 2:
                str = "citytr";
                break;
            case 3:
                str = "countytr";
                break;
            case 4:
                str = "towntr";
                break;
            default:
                break;
        };

        return str;
    }
}

以上是我写的完整代码,用的HtmlAgilityPack组件解析html,直接开源下载就可以。关键的数据都已经获得到 如:区号  和名称  

你可以用来写入你的数据库即可。

效果如下:

以上是关于从统计局抓取最新的全国区县数据!!的主要内容,如果未能解决你的问题,请参考以下文章

全国行政区划基础矢量数据(精确到区县级别)- 详细版 - 全国 shp 矢量数据汇总

全国官方最新省市区街道详细邮编物流选用

创建公共配置表,并以全国区县代码维护为例

GIS相关网站下载全国的GeoJSON格式数据可以到区县级数据

2019年最新全国省市区街道共46462条数据(统计局MySQL数据库)

全国城市地级市区县sql