一种解析网页编码的方法及装置与流程

文档序号:19495992发布日期:2019-12-24 14:58阅读:221来源:国知局
一种解析网页编码的方法及装置与流程

本发明涉及互联网技术领域,特别是涉及一种解析网页编码的方法及装置。



背景技术:

网络爬虫是一种按照一定的规则自动抓取网页信息的程序或者脚本,网页数据在网络传输过程中是以二进制的形式进行交互的,数据的获取方需要以一种特定的编码规则将网页数据进行解码得到人类可以阅读的形式。主流的网络传输以超文本传送协议(hypertexttransferprotocol,简称http)进行网页的封装,网页数据以超文本标记语言(hypertextmarkuplanguage,简称html)进行组织与描述。http协议中有编码字段供服务端进行配置,但http协议对该编码字段并无严格要求,有些网站服务端的开发者并没有将该编码字段的编码与网页中使用的编码进行统一设置;同样的,在html结构中通常以meta标签的charset属性来标识该网页所采用的编码,但有些网站开发者并没有填写该属性,甚至填写的该属性与网页实际使用的编码不符。

虽然绝大多数编码都可以对英文字符的编码值进行正确解码,但是解码中文字符的编码值就对编码有着严格的要求,需要特定的编码才能对中文字符的编码值进行解码。由于上述原因的存在,导致网络爬虫在获取中文网页信息时无法确定应该以何种编码对网页数据进行解码。针对上述情况,目前市面上的浏览器主要依靠对网页数据进行复杂的统计算法来猜测实际使用的编码,但是在网络爬虫实验中,这些算法的效率不足以满足网络爬虫高实时性获取网页信息的要求。



技术实现要素:

有鉴于此,本发明提出了一种解析网页编码的方法及装置,主要目的在于解决爬虫系统进行网页解析时需要对网页数据进行复杂的统计计算来猜测网页实际使用的编码这一过程所造成的获取网页信息效率低下的问题。

依据本发明的第一个方面,本发明提出了一种解析网页编码的方法,包括:

从网页应答包中读取网页回应数据;

通过预置编码信息对网页回应数据分段进行解码,判断当前数据段中是否记录有网页编码信息;

若判断结果为是,则用网页编码信息对当前数据段进行解码,当对当前数据段完全解码时,通过网页编码信息对网页回应数据进行解码;

若判断结果为否,则通过预置编码信息对另一数据段进行解码,判断其中是否记录有网页编码信息。

依据本发明的第二个方面,本发明提出了一种解析网页编码的装置,包括:

获取单元,用于从网页应答包中读取网页回应数据;

判断单元,用于通过预置编码信息对获取单元读取的网页回应数据分段进行解码,判断当前数据段中是否记录有网页编码信息;

处理单元,用于当判断单元的判断结果为是时,用网页编码信息对当前数据段进行解码,当对当前数据段完全解码时,通过网页编码信息对网页回应数据进行解码;

处理单元还用于当判断单元的判断结果为否时,通过预置编码信息对另一数据段进行解码,通过判断单元判断其中是否记录有网页编码信息。

借由上述技术方案,本发明实施例提供的解析网页编码的方法及装置,能够从网页应答包中读取网页回应数据,通过预置编码信息对网页回应数据分段进行解码,判断当前数据段中是否记录有网页编码信息,当判断结果为是时,用所述网页编码信息对当前数据段进行解码,当对所述当前数据段完全解码时,说明该网页编码信息为网页实际使用的编码信息,进一步的通过所述网页编码信息对所述网页回应数据进行解码后并保存该网页;当判断结果为否时,通过所述预置编码信息对另一数据段进行解码,判断其中是否记录有网页编码信息。与现有技术中需要对网页数据进行复杂的统计算法来猜测网页实际使用的编码方式相比,本发明提高了爬虫系统解析网页的速率,满足了爬虫系统高实时性获取网页信息的要求。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1示出了本发明实施例提供的一种解析网页编码的方法的流程图;

图2示出了本发明实施例提供的一种解析网页编码的装置的组成框图;

图3示出了本发明实施例提供的一种解析网页编码的装置的组成框图。

具体实施方式

下面将参照附图更加详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

在通过网络爬虫获取网页信息时,由于http协议包中的编码字段记录的编码信息以及在html数据结构中meta标签标识的网页编码信息与网页实际使用的编码信息不符,在这种情况下爬虫系统通常无法确定应该以何种编码对网页数据进行解码,只有通过对网页数据进行复杂的统计算法来猜测网页实际使用的编码,这些算法的效率不足以满足网络爬虫高实时性获取网页信息的要求。

为了解决爬虫系统进行网页解析时需要对网页数据进行复杂的统计计算来猜测网页实际使用的编码这一过程所造成的获取网页信息效率低下的问题,本发明实施例提供了一种解析网页编码的方法,如图1所示,该方法包括:

101、从网页应答包中读取网页回应数据。

通常网络爬虫在获取页面信息时,需要自指定的统一资源定位符(uniformresourcelocator,简称url)地址开始下载网页数据,在网页数据传输的过程中以超文本传送协议(hypertexttransferprotocol,简称http)进行网页的封装,网页数据以超文本标记语言(hypertextmarkuplanguage,简称html)进行组织与描述。网络爬虫通过向服务器发送网页请求包(http请求包),待服务器对网页请求包进行响应后接收服务器返回的网页应答包(http应答包),网页应答包中包括了状态行、消息头及响应内容,其中状态行反映的是服务器对网络爬虫发送的网页请求包的响应,响应内容通常为网页正文即服务器返回的html页面数据,也就是步骤101中的网页回应数据。

102、通过预置编码信息对网页回应数据分段进行解码,判断当前数据段中是否记录有网页编码信息。

由于信息在网络传输过程中以二进制流的形式进行交互,数据的获取方需要以一种编码规则将数据解码为人类可以阅读的形式,因此当步骤101从网页应答包中读取网页回应数据之后,需要通过预置编码信息将网页回应数据进行解码,对网页回应数据进行解码后会得到部分网页回应信息(未完全解码)或全部网页回应信息(完全解码),而通常情况下任意编码都可以正确对英文字符进行解码,因此用于记录网页编码信息的英文编码字段会被解码,从而确定网页回应数据中是否记录有网页编码信息。通过对网页回应数据进行上述处理后,若仍然无法确定网页实际使用的编码信息,那么需要对网页回应数据重新进行解码处理,为了避免对网页回应数据进行重复解码导致处理资源的损耗,因此本发明实施例可以执行步骤102通过预置编码信息对网页回应数据分段进行解码,判断当前数据段中是否记录有网页编码信息。当对网页回应数据中的当前数据段进行处理后仍无法确定网页实际使用的编码信息,那么可以继续对另一个数据段进行处理,避免了重新对全部的网页回应数据进行处理造成的处理资源的浪费。

103、若判断结果为是,则用网页编码信息对当前数据段进行解码,当对当前数据段完全解码时,通过网页编码信息对网页回应数据进行解码。

当在步骤102中判断当前数据段中记录有网页编码信息后,需要通过网页编码信息对当前数据段进行解码,确定网页编码信息是否能对当前数据段完全解码,当能完全解码时,说明当前数据段中记录的网页编码信息可以作为网页实际使用的编码信息,当获取到网页实际使用的编码信息后,进一步的可以通过该网页编码信息对网页回应数据进行解码,得到人类可以阅读的网页信息,进而可以对网页信息进行保存。若不能完全解码,说明当前数据段中记录的网页编码信息不是网页实际使用的编码信息,需要使用预置编码信息对网页回应数据中的另一数据段进行解码分析。

104、若判断结果为否,则通过预置编码信息对另一数据段进行解码,判断其中是否记录有网页编码信息。

当在步骤102中判断当前数据段中没有记录网页编码信息后,需要通过预置编码信息对另一数据段进行解码,判断其中是否记录有网页编码信息,若记录有网页编码信息则可以执行步骤103;若没有记录网页编码信息则继续执行步骤104。

本发明实施例提供的解析网页编码的方法,能够从网页应答包中读取网页回应数据,通过预置编码信息对网页回应数据分段进行解码,判断当前数据段中是否记录有网页编码信息,当判断结果为是时,用所述网页编码信息对当前数据段进行解码,当对所述当前数据段完全解码时,说明该网页编码信息为网页实际使用的编码信息,进一步的通过所述网页编码信息对所述网页回应数据进行解码后并保存该网页;当判断结果为否时,通过所述预置编码信息对另一数据段进行解码,判断其中是否记录有网页编码信息。与现有技术中需要对网页数据进行复杂的统计算法来猜测网页实际使用的编码方式相比,本发明提高了爬虫系统解析网页的速率,满足了爬虫系统高实时性获取网页信息的要求。

由于网页应答包中包含的网页回应数据也就是网页回应正文通常为html结构数据,因此为了更好的对上述图1所示的方法进行理解,本发明实施例将以http应答包作为网页应答包,html结构数据作为网页回应数据,针对图1的各步骤进行详细说明。

从网页应答包中读取网页回应数据也就是从http应答包中读取html结构数据的过程也就是使用网络爬虫抓取网页http应答包并从中获取整个网页html数据包的过程,随后需要将网页的二进制数据解码为字符串显示。

当通过预置编码信息对html结构数据进行分段解码之前,需要获取预置编码信息。具体的,需要从http应答包中查找并读取编码字段,判断编码字段中是否记录有应答包编码信息。若http应答包中的编码字段中记录有应答包编码信息,则用所述应答包编码信息作为预置编码信息,其中,http应答包中的编码字段记录的应答包编码信息为html结构数据使用的字符集,通常字符集里包括了常用的字符,并且指定了这些常用字符的编码规则,例如针对中文网页而言,从http应答包中的编码字段“charset=gb2312”中可以读取出网页数据所使用的编码信息也就是字符集为gb2312,gb2312是信息交换用汉字编码字符集,为一种汉字编码扩展规范。通过http应答包中编码字段记录的编码信息gb2312可以将二进制的网页数据解码得到汉字字符串。此外,从http应答包中的字段“content-type:text/html”可以读取出网页数据为纯文本的html结构数据。若http应答包中的编码字段中没有记录应答包编码信息,则html结构数据的获取方会使用默认编码信息作为预置编码信息,例如可以使用万国码utf-8作为预置编码信息。

当获取到html结构数据和预置编码信息后,就需要从html结构数据中获取网页文件声明的编码信息,因此需要使用预置编码信息对html结构数据进行解码,为了提高解码效率以及需要重复解码时再一次对全部html结构数据进行解码所造成的对处理资源的损耗,本发明实施例可以按照预设分段规则先将html结构数据进行分段,通过预置编码信息对网页回应数据从头逐段进行解码。作为一种可选的实施方式,本发明实施例可以将html结构数据以每20%数据分为一个数据段的预设规则进行分段,通过预置编码信息从起始20%的数据段开始逐段进行解码。当然,还可以按照其他比例对html结构数据进行分段。

当按照预设分段规则将html结构数据进行分段后,需要通过预置编码信息从头逐段对html结构数据进行解码,判断当前数据段中是否记录有网页编码信息,其过程包括读取当前数据段中的编码字段,判断编码字段中是否记录有网页编码信息。

在实际情况下,由于html结构数据中通常以meta标签来标识网页文件声明的编码信息,并且html结构数据中的编码信息一般会记录在整个数据的前半部分,因此需要按照预设分段规则对html结构数据进行分段后,通过预置编码信息对html结构数据从头逐段进行解码,查找当前数据段中是否记录有meta标签,进一步的读取meta标签是否标识有网页编码信息。例如,<metahttp-equiv="content-type"content="text/html;charset=utf-8"/>为html结构数据中meta标签的http-equiv属性,其中编码字段charset记录有网页编码信息utf-8。由于html结构数据的标签和属性信息均为英文,因此无论预置编码信息为何种类型的编码,其都可以正确对html结构数据中的标签和属性进行解码分析,获取网页编码信息。

当通过上述方式确定当前数据段中记录有网页编码信息之后,若网页编码信息与预置编码信息不同时,需要使用网页编码信息对当前数据段重新进行解码,若能对当前数据段完全解码,则说明该网页编码信息可以作为网页实际使用的编码信息,进一步的,可以通过该网页编码信息对其他数据段进行解码,将解码后得到的网页信息进行保存。若网页编码信息与预置编码信息相同时,并不能说明该网页编码信息就是网页实际使用的编码信息,为了能够获取正确的网页编码信息,则同样需要使用该网页编码信息对当前数据段重新进行解码,若能对当前数据段完全解码,则说明该网页编码信息可以作为网页实际使用的编码信息。

当通过上述方式确定当前数据段中没有记录网页编码信息之后,则需要通过预置编码信息对与当前数据段相邻的下一个数据段进行解码,判断其中是否记录有网页编码信息,若有,则与上述“确定当前数据段中记录有网页编码信息之后”的处理方式相同,直到确定网页实际使用的编码信息为止。

此外,在通过预置编码信息对当前数据段进行解码后,若当前数据段被预置编码信息完全解码,并且当前数据段中记录的网页编码信息与预置编码信息相同时,则无需通过当前数据段中记录的网页编码信息对当前数据段重新进行解码即可将预置编码信息确定为网页实际使用的编码信息,进一步的,可以通过预置编码信息对网页回应数据中的其他数据段进行解码,将解码后得到的网页信息进行保存。

本发明实施例通过预置编码信息对网页回应数据进行分段解码,获取网页数据中编码字段记录的网页编码信息,通过预置信息与网页编码信息的比对,找到了一个在精确匹配编码信息与粗略匹配编码信息之间的平衡点,通过牺牲一定的匹配准确度换来爬虫系统高实时性获取网页信息的效率,并且避免了网页应答包中的编码信息和网页数据中声明的编码信息不一致时导致的重复解码全部网页数据带来的处理资源损耗的问题。

作为对上述图1所示方法的实现,本发明实施例提供了一种解析网页编码的装置,如图2所示,该装置包括:获取单元21、判断单元22及处理单元23,其中,

获取单元21,用于从网页应答包中读取网页回应数据;

判断单元22,用于通过预置编码信息对获取单元21读取的网页回应数据分段进行解码,判断当前数据段中是否记录有网页编码信息;

处理单元23,用于当判断单元22的判断结果为是时,用网页编码信息对当前数据段进行解码,当对当前数据段完全解码时,通过网页编码信息对网页回应数据进行解码;

处理单元23还用于当判断单元22的判断结果为否时,通过预置编码信息对另一数据段进行解码,通过判断单元22判断其中是否记录有网页编码信息。

进一步的,如图3所示,获取单元21还用于获取预置编码信息;获取单元21包括:

读取模块211,用于读取网页应答包中的编码字段;

判断模块212,用于判断读取模块211读取的编码字段中是否记录有应答包编码信息;

确定模块213,用于当判断模块212判断编码字段中记录有应答包编码信息时,将应答包编码信息确定为预置编码信息;

确定模块213还用于当判断模块212判断编码字段中没有记录应答包编码信息时,将默认编码信息确定为预置编码信息。

进一步的,判断单元22包括:

分段模块221,用于按照预设分段规则将网页回应数据进行分段;

解码模块222,用于通过预置编码信息对网页回应数据从头逐段进行解码。

进一步的,判断单元22还包括:

读取模块223,用于读取当前数据段中的编码字段,判断编码字段中是否记录有网页编码信息。

本发明实施例提供的解析网页编码的装置,能够从网页应答包中读取网页回应数据,通过预置编码信息对网页回应数据分段进行解码,判断当前数据段中是否记录有网页编码信息,当判断结果为是时,用所述网页编码信息对当前数据段进行解码,当对所述当前数据段完全解码时,说明该网页编码信息为网页实际使用的编码信息,进一步的通过所述网页编码信息对所述网页回应数据进行解码后并保存该网页;当判断结果为否时,通过所述预置编码信息对另一数据段进行解码,判断其中是否记录有网页编码信息。与现有技术中需要对网页数据进行复杂的统计算法来猜测网页实际使用的编码方式相比,本发明提高了爬虫系统解析网页的速率,满足了爬虫系统高实时性获取网页信息的要求。

此外,本发明实施例通过预置编码信息对网页回应数据进行分段解码,获取网页数据中编码字段记录的网页编码信息,通过预置信息与网页编码信息的比对,找到了一个在精确匹配编码信息与粗略匹配编码信息之间的平衡点,通过牺牲一定的匹配准确度换来爬虫系统高实时性获取网页信息的效率,并且避免了网页应答包中的编码信息和网页数据中声明的编码信息不一致时导致的重复解码全部网页数据带来的处理资源损耗的问题。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

可以理解的是,上述方法及装置中的相关特征可以相互参考。另外,上述实施例中的“第一”、“第二”等是用于区分各实施例,而并不代表各实施例的优劣。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(dsp)来实现根据本发明实施例的发明名称(如确定网站内链接等级的装置)中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。

应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1