发明内容
本发明的目的在于提供一种环保信息网格抓取方法,从而解决现有技术中存在的前述问题。
为了实现上述目的,本发明采用的技术方案如下:
一种环保信息网格抓取方法,包括如下步骤:
S1,判断抓取网站是否有效,如果所述抓取网站有效,则执行S2,如果所述抓取网站无效,则返回提示无效信息;
S2,获取所述抓取网站的内容流,判断所述内容流是否为图片,如果是,则将所述内容流转化成图片,并保存;否则,执行S3;
S3,将所述内容流转化为字符串;
S4,使用正则表达式,将所述字符串进行分解,通过网格数据特征获取网格数据。;
S5,对获取的网格数组数除列数取模存储,循环,直至得到所有的待抓取的环保信息。
进一步地,S5之后,还包括S6,将所述待抓取的环保信息存入关系数据库中。
其中,S1中,所述判断抓取网站是否有效,具体为,根据用户输入的服务器、数据库和抓取网站地址,判断抓取网站的有效性。
优选地,S1中,所述判断抓取网站是否有效,采用如下的方法:通过HTTP连接的GET方法获取来自因特网的响应,判断HTTP定义的状态代码的值是否有效,如果所述HTTP定义的状态代码的值有效,则所述抓取网站有效,否则,无效。
其中,S2中,所述获取所述抓取网站的内容流,具体为,使用GetResponseStream()方法,获取来自服务器的响应的HTTP内容流。
其中,S3中,所述将所述内容流转化成字符串,具体为,将所述内容流初始化为“utf-8”字符编码,获取所述内容流从当前位置到结束位置的字符串。
进一步地,S3和S4之间,还包括步骤,在内存中,创建字符串数组的网格。
优选地,S5中,所述将分解后的所述字符串存入字符串数组的网格中,采用如下方法:
利用网格数组数除以所述网格的列数,取模值得到分解后的所述字符串在所述网格中的单元格的位置,并将所述字符串存入所述单元格中。
优选地,所述待抓取的环保信息为默认的或用户设定的。
进一步地,S2中,还包括步骤,每间隔设定的时间,遍历一次所述抓取网站的数据,判断是否有增量,如果有增量,针对增量,按照S2-S5的方法进行环保信息网格抓取,如果没有增量,则结束;
和/或
判断是否中断,如果中断,则判断中断点,并续抓;如果无中断,则继续。
本发明的有益效果是:本发明实施例中,考虑到环保行业网络数据的自身特点,通过获取网站内容流,并将内容流转化成字符串,再使用正则表达式将字符串进行分解,提取所需的网格字符串,最后将分解的字符串运用算法取模存入数组中,通过循环遍历所有数组,直到获取到待抓取的所有环保网格信息。这样,通过总体抓取-转化-正则分解-特征获取-取模存储,逐步实现对获取的环保网站中复杂信息的逐步细化,从而获取到所需的环保网格信息,为环保行业提供信息数据支撑。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施方式仅仅用以解释本发明,并不用于限定本发明。
如图1所示,一种环保信息网格抓取方法,包括如下步骤:
S1,判断抓取网站是否有效,如果所述抓取网站有效,则执行S2,如果所述抓取网站无效,则返回提示无效信息。
其中,可以根据用户输入的服务器、数据库和抓取网站地址,判断抓取网站是否有效。
可以采用如下的方法判断抓取网站是否有效:通过HTTP连接的GET方法获取来自因特网的响应,判断HTTP定义的状态代码的值是否有效,如果所述HTTP定义的状态代码的值有效,则所述抓取网站有效,否则,无效。
如果抓取网站是有效的,则计算HTTP内容流的长度,在内存里申请byte字节组空间。
S2,获取所述抓取网站的内容流,判断所述内容流是否为图片,如果是,则将所述内容流转化成图片,并保存;否则,执行S3。
其中,可以使用GetResponseStream()方法,获取来自服务器的响应的HTTP的内容流。
该内容流包含抓取网站的所有信息,对于环保网站信息而言,数据类型多为表格或图像,其中,如果是表格数据,比如,对于PM2.5而言,可能包含多个地区、多个时间点的数据信息,信息内容比较多,如果将该网站发布的所有的这些信息,全部抓取并存储到关系数据库中,则在关系数据库中,进行数据分析比较困难。所以在本发明实施例中,采用S3-S5实现表格数据的抓取;如果是图像数据,则将图像的内容流转化成图片,再保存在本地或服务器的数据库中,为后续的环保数据分析提供支撑。
S3,将所述内容流转化为字符串。
其中,可以将所述内容流初始化为“utf-8”字符编码,获取所述内容流从当前位置到结束位置的字符串,从而将内容流转化为字符串。
S4,使用正则表达式,将所述字符串进行分解,通过网格数据特征获取网格数据。
对字符串进行分解时,采用了正则表达式,通过使用正则表达式将内容流进行划分。可以根据网格特征和数据抓取要求来设定正则表达式,利用正则表达式对环保信息内容进行一一匹配,在建立正则表达式和匹配时,注意表格的行列标记尽量清晰,以免抓取到非需求的数据。
其中,环保信息的表格内容,可以采用如下方法进行查找:在字符串中用表格数据首尾特征符号,比如“<table”,“‘“</table>”等进行查找,获取表格内容。
使用正则表达式对表格内容进行分解,可以采用如下方法:使用“"<[^>]*?>”方法把表格内容转化成一个一个的字符串。
在建立正则表达式的过程中,如果对正则表达式不熟悉,可以先在一些正则表达式测试器中对所写正则表达式进行验证。
S5,用获取的网格数组数除列数取模存储,循环直至得到所有的待抓取的环保信息。
首先,在内存中,创建字符串数组的网格。由于该网格用于存储分解后的字符串,所以,字符串数组网格中单元格的个数,一般根据分解后的字符串的个数确定,而网格的行数和列数,可以根据待抓取的环保信息的内容进行确定。
把所有的分解后的字符串存入到字符串数组的网格中。可以采用模运算的方法。其中,模运算广泛的运用于程序编程中,根据不同的网格特征和数据抓取要求,可以设定不同的算法以满足要求。本发明实施例中,可以采用如下方法:利用网格数组数除以所述网格的列数,取模值得到分解后的所述字符串在所述网格中的单元格的位置,并将所述字符串存入所述单元格中。例如具有20个字符串,字符串数组的网格包含20个单元格,是5行5列的网格,将字符串的位置数除以网格的列数就可以得到字符串应存入的网格的单元格的位置,存入内存中。比如第一个字符串,1除以5取模为1,则将第一个字符串存入网格的第一行第一列;第5个字符串除以5取模为0,则将第五个字符串存入第一行第五列,并换行;第6个字符串就是6除以5取模为1,则第6个字符串存入换行后的第一列……一直如此循环到最后一个字符串。其中,待抓取的环保信息可以是默认的,也可以是用户设定的。采用何种方式获取环保信息,或者,获取何种环保信息,主要是根据用户的需求进行设定。如果是默认的,使用比较方便,不需要针对不同的用户需求进行设定。
本发明实施例中,S5之后,还包括S6,将所述待抓取的环保信息存入关系数据库中。
从而为环保行业提供信息支撑,便于环保人士对环保数据的分析。
本发明实施例中,S2中,还可以包括步骤,每间隔设定的时间,遍历一次所述抓取网站的数据,判断是否有增量,如果有增量,针对增量,按照S2-S5的方法进行环保信息网格抓取,如果没有增量,则结束。
本发明实施例中,用Visual C#创建Windows服务程序来实现Timer计时器。用Elapsed事件的Interval设置间隔时间来执行,每间隔设定的时间,程序重新执行一次,遍历一次网络数据,判断是否有增量,如果有新数据,继续获取。采用增量续抓的方法,可以避免数据重复抓取,浪费资源的问题,从而提高抓取效率。本发明实施例中,Windows服务程序Timer计时器监听服务程序的服务WindowsServicesTimerMonitor的Windows服务10秒监测一次,当Windows服务非正常停止服务时,将自动监控重新启动Windows服务。
如果设定的间隔时间发生变化,则需要重新启动服务器,新的设定才会生效。
本发明实施例中,S2中,还可以包括步骤,判断是否中断,如果中断,则判断中断点,并续抓;如果无中断,则继续。
因为数据抓取实际上是程序自动从网络上抓取所需信息,所以也会如人们上网会受网络稳定性、网站稳定性影响一样,网络稳定的问题及所抓取网站的稳定性都会影响web环保网站信息定向抓取的质量。
本发明针对网络及网站的稳定问题,设计了断点判断,断点续跑功能,防止因为网络及网站的不稳定导致的数据抓取重复,数据抓取遗漏的情况。
本发明实施例中,还可以提供定时抓取的设置,可以用Visual C#中的System.Configuration.ConfigurationSettings.AppSettings获取设置的时间以及当前的时间,并对设置的时间与当前的时间进行比较,当两者相等时,开始执行本发明实施例提供的上述环保信息网格抓取方法。
为了便于理解,下面以抓取中国环境监测总站的空气质量的日报数据为例,来说明本发明实施例提供的环保信息网格抓取方法。
中国环境监测总站发布的空气质量的日报给出了某日、多个地区的首要污染物的等级和AQI。
利用本发明实施例提供的环保信息网格抓取方法从该网格数据中抓取需要的环保信息,首先,判断网址有效,然后抓取网站内容流,如图2所示。
获取内容流之后,将内容流转换为字符串,通过查看字符串化的源文件,如图3所示。可以看出,需要抓取的网格的数据块都存在唯一字符串“</table>”,且每行文本都有唯一字符串“</tr>”,每列都有唯一字符串“</td>”分隔;所以可以通过"<table"特征获取网格,然后通过书写正则表达式对对各列进行精确提取,其中,正则表达式的规则库的截图如图4所示,书写正则表达式(?<=<td[^>]*?>)(?:(?!</?td).)*,对其进行验证,正则表达式的测试结果的截图如图5所示;最后通过取模算法,将表达数据正确存储。根据上述方法抓取到的中国环境监测总站上的环保信息结果如图6所示。
通过采用本发明公开的上述技术方案,得到了如下有益的效果:本发明实施例中,考虑到环保行业网络数据的自身特点,通过获取网站内容流,并将内容流转化成字符串,再使用正则表达式将字符串进行分解,提取所需的网格字符串,最后将分解的字符串运用算法取模存入数组中,通过循环遍历所有数组,直到获取到待抓取的所有环保网格信息。这样,通过总体抓取-转化-正则分解-特征获取-取模存储,逐步实现对获取的环保网站中复杂信息的逐步细化,从而获取到所需的环保网格信息,为环保行业提供信息数据支撑。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域人员应该理解的是,上述实施例提供的方法步骤的时序可根据实际情况进行适应性调整,也可根据实际情况并发进行。
上述实施例涉及的方法中的全部或部分步骤可以通过程序来指令相关的硬件来完成,所述的程序可以存储于计算机设备可读取的存储介质中,用于执行上述各实施例方法所述的全部或部分步骤。所述计算机设备,例如:个人计算机、服务器、网络设备、智能移动终端、智能家居设备、穿戴式智能设备、车载智能设备等;所述的存储介质,例如:RAM、ROM、磁碟、磁带、光盘、闪存、U盘、移动硬盘、存储卡、记忆棒、网络服务器存储、网络云存储等。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。