汇总:大数据采集[被带去派出所采集信息]

优采云 发布时间: 2022-12-15 11:21

  汇总:大数据采集[被带去派出所采集信息]

  第一次接触 HtmlAgilityPack 是在 5 年前。一些意外导致我暂时从技术部调到销售部。我负责建立一些流程并寻找潜在客户。最后在阿里巴巴上找了很多客户资料。它非常全面。一开始是手动复制到Excel,

  大家好,我是建筑先生,一个会写代码会吟诗的架构师。今天讲讲大数据采集【被带到派出所采集信息】,希望能帮助大家进步!!!

  第一次接触 HtmlAgilityPack 是在 5 年前。一些意外导致我暂时从技术部调到销售部。我负责建立一些流程并寻找潜在客户。最后在阿里巴巴上找了很多客户资料。它非常全面。一开始是手动复制到Excel,真的很累。虽然那时候C#还是很牛的,但是我也想过能不能通过程序批量获取(所以还是多点想法比较好)。几经周折,终于发现了HtmlAgilityPack这个神器。这几年我也用HtmlAgilityPack采集来处理很多类型的数据,尤其是足球比赛数据库采集和天气数据采集的数据。HTML敏捷包,

  今天的主要内容是HtmlAgilityPack的基本介绍、使用和实战代码。最后,我们以采集天气数据为例,介绍一下实际的采集分析过程和简单的代码。我们将在下一篇文章中开源天气数据库和C#运行代码。采集核心就介绍到这里了。其实核心代码都在,你自己处理就可以了。同时,也免费向有需要的人开放。详情请关注下期文章。

  .NET开源目录:本博客其他.NET开源项目的【目录】文章目录

  本文原文地址:C#+HtmlAgilityPack+XPath为您带来采集数据(以采集天气数据为例)

  一、HtmlAgilityPack简介

  HtmlAgilityPack 是一个用于解析 HTML 元素的开源类库。它最大的特点是可以通过XPath来解析HMTL。如果您以前使用过 C# 操作过 XML,那么您将能够轻松使用 HtmlAgilityPack。目前最新版本是1.4.6,下载地址如下: 目前稳定版是1.4.6,最后一次更新是2012年,所以很稳定,基础功能也很全面,没必要更新它。

  说到HtmlAgilityPack,就不得不介绍一个辅助工具了。不知道别人用的时候是怎么分析页面结构的。反正我用的是官方的工具HAPExplorer。很有用。下面我们就来介绍下我们在使用的时候如何使用。

  2. XPath技术介绍及使用 2.1 XPath简介

  XPath即XML路径语言,是一种用于确定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树结构,提供了在数据结构树中查找节点的能力。XPath 的初衷是将其用作 XPointer 和 XSL 之间的通用语法模型。但 XPath 作为一种小型查询语言很快被开发人员采用。

  XPath 是 W3C 标准。它的主要目的是在 XML1.0 或 XML1.1 文档节点树中定位节点。目前有XPath1.0和XPath2.0两个版本。其中XPath1.0于1999年成为W3C标准,XPath2.0标准于2007年确立。W3C关于XPath的详细英文文档请见:。

  2.2 XPath的路径表达式

  XPath是XML的一种查询语言,其作用与SQL非常相似。下面以XML为例介绍XPath的语法。下面的资料是几年前学习这个的时候从网上和博客园得到的一些资料。暂时找不到出处。例子和文字基本上是为了参考。再次感谢你。如果您找到类似的 文章,请告诉我链接,我会添加参考。下面XPath的相关表达式也很基础,基本够用了。

  

Empire Burlesque

Bob Dylan

10.90

  只听见建筑师办公室传来建筑师的声音:

  病骨断冠广,孤臣千里江。有谁会配上联或下联吗?

  定位节点:XML是树状结构,类似于文件系统中的文件夹结构,XPath也类似于文件系统的路径命名方式。但是,XPath是一种模式(Pattern),它可以选择XML文件中路径与某种模式相匹配的所有节点。例如,要选择目录下 cd 中的所有价格元素,可以使用:

  此代码由Java架构师必看网-架构君整理

/catalog/cd/price

  如果 XPath 以斜杠 (/) 开头,则表示它是绝对路径。如果开头有两个斜杠 (//),则将选择文件中与模式匹配的所有元素,即使它们在树中处于不同级别。以下语法将选择文件中所有名为 cd 的元素(将选择树中的任何级别)://cd

  选择未知元素:使用星号 (*) 选择未知元素。以下语法选择 /catalog/cd 的所有子元素:

  /catalog/cd/*

  以下语法将选择收录价格作为子元素的所有目录子元素。

  此代码由Java架构师必看网-架构君整理

/catalog/*/price

  以下语法选择具有两个名为 price 的父级级别的所有元素。

  /*/*/price

  需要注意的是,如果要访问不分层次的元素,XPath 语法必须以两个斜杠(//)开头,如果要访问未知元素,则必须使用星号(*)。星号只能表示未知 name 的元素不能表示未知层次结构的元素。

  选择分支:使用方括号选择一个分支。以下语法从目录的子元素中获取名为 cd 的第一个元素。在 XPath 的定义中没有第 0 个元素这样的东西。

  /catalog/cd[1]

  以下语法选择目录中的最后一个 cd 元素:(XPathj 没有定义像 first() 这样的函数,在上例中使用 [1] 来提取第一个元素。

  /catalog/cd[last()]

  以下语法选择 price 元素的值等于 10.90 的所有 /catalog/cd 元素

  /catalog/cd[price=10.90]

  选择属性:在XPath中,除了选择元素外,还可以选择属性。属性都以@开头。例如选择文件中名为 country 的所有属性:

  //@country

  以下语法选择 country 属性值为 UK 的 cd 元素

  //cd[@country='UK']

  3. 采集Weather网站案例3.1需求分析

  我们要的采集是全国各个城市的天气信息,网站是:,网站数据分为两种,一种是历史数据,涵盖2011年至今,一种是天气预报数据,历史数据就是天气预报,也就是实际的天气数据。采集 必须覆盖全国主要城市,最好是所有城市。通过分析网站的页面,确实符合要求。天气信息,包括实际天气状况、风力状况和温度状况,包括最小和最大间隔。

  结合基本需求,我们进入网站,分析一些通用的特征,以及主页面的结构。

  3.2 网站页面结构分析

  对于采集大量信息,网站页面的详细分析和总结是必要的。因为机器采集不是人,所以需要动态构造URL、请求或页面html,然后解析。所以分析网站页面结构是第一步,也是很关键的一步。我们首先进入总历史页面:,如下图:

  很明显,这个总页是按省划分的。可以看到每个省份和地级市名称的链接格式是固定的,只是拼音缩写不一样。每个省的第一个城市是省会城市。需要注意的是,在程序上,要区分省会城市和其他地级市。当然,省会城市也可以省略,毕竟只有30多个,人工标注也很快。这个页面我们主要会用到采集省份的缩写信息,然后我们选择一个省份,点击进入,可以看到每个省份的具体城市信息,比如我们选择辽宁省:如下图:

  

  同样,每个省下面的地区也有单独的链接,格式和上面类似,按照城市的拼音。我们可以看到,每个省下面都有大的地级行政区,每个地级市区再细分为小县城和市区。我们随意点开大连市的链接,进去看看具体的气象历史信息:

  本页包括该市从2011年1月到2015年至今的历史数据,以月为单位。链接的特征也很固定,包括城市名的拼音和年月信息。所以构建这个链接很容易。以下是每个月的情况:

  我屏蔽了一些广告,请手动清除。每个城市的月度天气信息比较简单,直接表格填写数据,日期,天气情况,温度和风力。这些步骤是根据页面上的链接一步步引导的,所以上面的过程很清楚,给采集的信息也很清楚,有一个大概的思路:

  先采集整个省的拼音代码,然后依次获取每个省的每个地级市的名称和拼音代码,以及对应的县级市,最后循环遍历每个县级市按月获取所有历史数据。下面将着重分析几个页面的节点,即如何使用HtmlAgilityPack和Xpath获取你想要的数据信息。至于存入资料库,就让八仙过海大展神通吧。我使用 XCode 组件。

  3.3 分析省县结构页面

  仍以辽宁省为例:打开页面,右键获取网页源代码,粘贴到HAPExplorer中,或者直接在HAPExplorer中打开链接,如下动图所示:

  我们可以看到右边的XPath地址,div结束后,下面有dl标签,就是我们要采集的行。下面我们使用代码获取上面的结构体。先看代码获取页面源码:

  public static string GetWebClient(string url)

{

string strHTML = "";

WebClient myWebClient = new WebClient();            

Stream myStream = myWebClient.OpenRead(url);

StreamReader sr = new StreamReader(myStream, Encoding.Default);//注意编码

strHTML = sr.ReadToEnd();

myStream.Close();

return strHTML;

}

  下面是分析各省下县市的程序。限于篇幅,我们省略了数据库部分,仅采集城市和拼音代码,输出:

<p>/// 添加省级-地区-县市 的城市信息,注意 省会城市 标记5

/// 省份代码

public static void ParsePageByArea(String cityCode)

{

//更加链接格式和省份代码构造URL

String url = String.Format("http://www.tianqihoubao.com/lishi/{0}.htm", cityCode);

//下载网页源代码 

var docText = HtmlHelper.GetWebClient(url);

//加载源代码,获取文档对象

var doc = new HtmlDocument(); doc.LoadHtml(docText);

//更加xpath获取总的对象,如果不为空,就继续选择dl标签

var res = doc.DocumentNode.SelectSingleNode(@"/html[1]/body[1]/div[1]/div[6]/div[1]/div[1]/div[3]");

if (res != null)

{

var list = res.SelectNodes(@"dl");//选择标签数组

if (list.Count 

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线