网页 抓取 innertext 试题( 国家最新行政区划的网址为-8使用ie参数)
优采云 发布时间: 2022-04-13 02:18网页 抓取 innertext 试题(
国家最新行政区划的网址为-8使用ie参数)
最近在做一个项目,需要使用行政区划的,可是在网上搜索了很久,都没有查到有最新的现成的文档。我知道在国家统计局的网站上是有整个国家的行政区划的,但是也是一个网页一个网页的,很难用复制粘贴的方式获取。那我就实现一个抓取网页的功能,从国家统计局的网站上抓取行政区划的数据。
网页的获取是一个很简单的过程,我们定义WebRequest 类来访问网址,然后WebResponse 类来接收响应的数据,然后用StreamReader 来读取流信息就可以了,下面是抓取网页并返回网页内容的函数,代码如下:
/// 获取网页内容
///
/// 网址
/// 编码
///
private string GetRequestInfo(string myUrl, string encoding)
{
WebRequest request = WebRequest.Create(myUrl);
WebResponse response = request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream(),
Encoding.GetEncoding(encoding));//gb2312 "utf-8"
string htmlContent = reader.ReadToEnd();
System.Threading.Thread.Sleep(1);
return htmlContent;
}
函数中的编码是我们要注意的。有的中文网页使用gb2312,有的使用utf-8。我们需要根据网页的编码来传递参数。
国家最新行政区划的网站是,用ie查看源码,看到区划代号的css类型是MsoNormal。这个很重要,后面我们在使用HtmlAgilityPack dll解析URL的时候会用到。HtmlAgilityPack 是一个用于解析 URL 内容的开源工具。它专门用于解析网页的内容。现在我只使用 .net 框架 2.0。
///
/// 解析
///
private List AnalyHtmlContentSinglePage(string htmlContent, string trClass)
{
List list = new List();
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(htmlContent);
HtmlAgilityPack.HtmlNodeCollection trList = doc.DocumentNode.SelectNodes(trClass);
if (trList != null)
{
foreach (HtmlAgilityPack.HtmlNode hn in trList)
{
string code = string.Empty;
string name = string.Empty;
string flag = string.Empty;
code = hn.InnerText;
if (code.Contains(" "))
{
flag = "3";
}
else if (code.Contains(" "))
{
flag = "2";
}
else if (code.Contains(" "))
{
flag = "1";
}
else
{
flag = string.Empty;
}
code = code.Replace(" ", "\t");
code = code.Replace(" ", "\t");
string[] sa = code.Split(new char[] { '\t' });
code = sa[0];
for (int i = 1; i < sa.Length; i++)
{
if (string.IsNullOrEmpty(sa[i])) continue;
name = sa[i].Trim();
}
list.Add(code + "\t" + name);
}
}
return list;
}
我把获取到的网页内容传递给这个函数,类型是MsoNormal。我们只能通过空格来识别行政级别。省空间少,市级空间比省长,县或区空间最长。这些是通过查看网页的源代码获得的。
只要使用这两个功能,就可以获取网页并进行分析,获取行政区划。