发明内容
本申请提供一种测试网络爬虫的方法及系统,目的在于不对真实网站形成打扰前提下,检测网络爬虫抓取海量网站页面时的工作性能。
为解决上述技术问题,本申请实施例提供的一种测试网络爬虫的方法及系统是这样实现的:
一种测试网络爬虫的方法,包括:
第一服务器配置预设数量的顶级域名,并将所述顶级域名设置为指向第二服务器的IP地址;
网络爬虫服务器读取所述顶级域名并根据所述顶级域名扩展出海量域名;
网络爬虫服务器将存储的DNS服务器地址设置为所述第一服务器的地址;
网络爬虫服务器遍历所述海量域名,并针对每个域名向第一服务器发起所述域名到第二服务器IP地址的转换请求;
网络爬虫服务器接收第一服务器发来的根据所述域名转换的第二服务器IP地址,并根据所述第二服务器的IP地址对第二服务器发起抓取请求;
第二服务器选取网站,并将所述网站提供给网络爬虫服务器抓取。
一种测试网络爬虫的方法,包括:
网络爬虫服务器建立海量域名,并将所述海量域名设置为指向第二服务器的IP地址;
网络爬虫服务器遍历所述海量域名,并针对每个域名对第二服务器发起抓取请求;
第二服务器选取网站,并将所述网站提供给网络爬虫服务器抓取。
一种测试网络爬虫的方法,包括:
网络爬虫服务器读取由第一服务器配置的预设数量的顶级域名并根据所述顶级域名扩展出海量域名;
网络爬虫服务器将存储的DNS服务器地址设置为所述第一服务器的地址;
网络爬虫服务器遍历所述海量域名,并针对每个域名向第一服务器发起所述域名到第二服务器IP地址的转换请求;
网络爬虫服务器接收第一服务器发来的根据所述域名转换的第二服务器IP地址,并根据所述第二服务器的IP地址对第二服务器发起抓取请求;
网络爬虫服务器对第二服务器选取的网站进行抓取。
一种测试网络爬虫的方法,包括:
网络爬虫服务器建立海量域名,并将所述海量域名设置为指向第二服务器的IP地址;
网络爬虫服务器遍历所述海量域名,并针对每个域名对第二服务器发起抓取请求;
网络爬虫服务器对第二服务器选取的网站进行抓取。
一种测试网络爬虫的方法,包括:
第二服务器接收网络爬虫服务器发来的网站抓取请求;
第二服务器选取预先建立的网站模板并对所述选取的网站模板填充内容后提供给网络爬虫服务器抓取。
一种测试网络爬虫的方法,包括:
第二服务器接收网络爬虫服务器发来的网站抓取请求;
第二服务器在预先建立的海量网站中按预设条件调用其中的一套网站,并将所述调用的网站提供给网络爬虫服务器抓取。
一种测试网络爬虫的系统,包括第一服务器,网络爬虫服务器,第二服务器,其中:
所述第一服务器,用来配置预设数量的顶级域名,并将所述顶级域名设置为指向第二服务器的IP地址;
所述网络爬虫服务器,用来读取所述顶级域名并根据所述顶级域名扩展出海量域名,将存储的DNS服务器地址设置为所述第一服务器的地址,遍历所述海量域名,并针对每个域名通过第一服务器获取第二服务器的IP地址,根据所述第二服务器的IP地址对第二服务器发起网站抓取请求;
所述第二服务器,用来选取网站,并将所述网站提供给网络爬虫服务器抓取。
一种测试网络爬虫的系统,包括第一服务器,网络爬虫服务器,第二服务器,其中:
所述网络爬虫服务器,用来建立海量域名,将所述海量域名设置为指向第二服务器的IP地址,遍历所述海量域名,并针对每个域名对第二服务器发起抓取请求;
所述第二服务器,用来选取网站,并将所述网站提供给网络爬虫服务器抓取。
本申请实施例的技术方案模拟出海量的网站提供给网络爬虫进行功能测试,能够在不对真实网站形成打扰的情况下,检测网络爬虫抓取海量网站页面时的工作性能。
具体实施方式
本申请实施例提供一种测试网络爬虫的方法及系统。
为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
图1是本申请测试网络爬虫方法一个实施例的流程图。如图1所示,测试网络爬虫的方法可以包括以下步骤:
S1:第一服务器配置预设数量的顶级域名,并将所述顶级域名设置为指向第二服务器的IP地址。
第一服务器可以配置预设数量的顶级域名与IP地址的映射关系。例如,第一服务器可以以test-1000.com和test-1001.com作为顶级域名,并且建立test-1000.com和test-1001.com到第二服务器IP地址的映射关系。进一步地,假设第二服务器的IP地址为10.125.227.1,那么第一服务器就可以建立test-1000.com和test-1001.com到10.125.227.1的映射关系,例如:
address=/.test-1000.com/10.125.227.1
address=/.test-1001.com/10.125.227.1
这样,只要以test-1000.com或test-1001.com作为顶级域名的子域名均可以指向第二服务器的IP地址10.125.227.1。例如,www.test-1000.com,t1.test-1001.com,t99.test-1000.com这些域名均可以指向10.125.227.1。
S2:网络爬虫服务器读取所述顶级域名并根据所述顶级域名扩展出海量域名。
在预设的顶级域名的基础上,网络爬虫服务器可以扩展出海量的子域名。例如,在预设的顶级域名test-1000.com的基础上,可以扩展出形如t1.test-1000.com,t2.test-1000.com,t99.test-1000.com等任意数量的子域名。这些扩展出的大量的子域名可以作为S2中所述的扩展出的海量域名。
网络爬虫服务器扩展出海量域名后,可以将所述海量域名放入待抓取队列。
S3:网络爬虫服务器遍历所述海量域名,并针对每个域名向第二服务器发起网站抓取请求。
网络中一个服务器若要通过一个域名访问另一个服务器,一般的,需要将该域名转换为对应的IP地址。为实现域名到IP地址的转换,可能需要调用域名解析函数。该域名解析函数可以将待转换的域名放在DNS请求中,并可以以UDP报文的方式发给预设的本地域名服务器。本地域名服务器查找到域名后,将对应的IP地址放在应答报文中返回。根据返回的IP地址便可实现对位于该IP地址的服务器的访问。
在一个优选的实施例中,所述网络爬虫服务器通过所述域名向第二服务器发起抓取请求具体包括以下步骤:
S301:网络爬虫服务器将存储的DNS服务器地址设置为所述第一服务器的地址。
网络爬虫服务器可以将存储的DNS服务器地址设置为所述第一服务器的地址。这样,当网络爬虫服务器要通过所述域名访问第二服务器时,例如通过域名t1.test-1000.com访问第二服务器时,就可以对第一服务器发出请求,请求第一服务器实现域名到IP地址的转换。
S302:网络爬虫服务器遍历所述海量域名,并针对每个域名向第一服务器发起所述域名到第二服务器IP地址的转换请求。
网络爬虫服务器可以调用域名解析函数,该域名解析函数可以将待转换的域名放在DNS请求中,以UDP报文的方式将域名解析请求发送至第一服务器。
第一服务器能够实现所述域名到第二服务器IP地址的转换。第一服务器收到网络爬虫服务器发来的域名解析请求后,可以提取该域名解析请求中的域名;第一服务器可以按照预先设置的所述域名至IP地址的映射关系,将所述提取的域名转换为第二服务器的IP地址;进一步地,第一服务器可以将第二服务器的IP地址放在应答报文中返回给网络爬虫服务器。
S303:网络爬虫服务器接收第一服务器发来的根据所述域名转换的第二服务器IP地址,并根据所述第二服务器的IP地址对第二服务器发起抓取请求。
网络爬虫服务器可以根据从第一服务器处获得的第二服务器的IP地址,对第二服务器发起网站抓取请求。
S4:第二服务器选取网站,并将所述网站提供给网络爬虫服务器抓取。
在本申请的一个实施例中,步骤S4可以按照以下方式实现:
S401:第二服务器选取预先建立的网站模板并对所述选取的网站模板填充内容后提供给网络爬虫服务器抓取。
网站模板一般已具备基础的网站框架,只是各个页面上的图片、文字、链接等均为空白。第二服务器可以预先建立网站模板,每当有服务器对第二服务器进行访问时,第二服务器便可以选取所述建立的网站模板。
进一步地,第二服务器可以调用存储的图片信息,文字信息,链接信息等。第二服务器启用所述建立的网站模板后,可以调用图片信息,文字信息,链接信息等对所述网站模板进行内容填充。网站模板内容填充完毕后,第二服务器可以向网络爬虫服务器发出响应信息,将填充完毕的网站提供给网络爬虫服务器抓取。
在本申请的另一个实施例中,步骤S401具体可以按照下面方式实现:
S411:第二服务器在预先建立的至少两套网站模板中按预设条件调用其中的一套网站模板。
为了保证网站的多样性,第二服务器可以建立若干套网站模板。所述若干套网站模板具有不同的网站框架,各个页面上的图片、文字、链接等依然均为空白。进一步地,第二服务器建立若干网站模板后可以根据网站模板的数量给每个网站模板进行编号,所有编号均不重复。例如,第二服务器建立了100套网站模板,那么这些网站模板的编号便是从1至100。
进一步地,每当有服务器对第二服务器进行访问时,第二服务器便可以在网站模板编号范围内随机选取一个编号,并调用与所述编号相对应的网站模板,启用所述调用的网站模板;
或者,每当有服务器对第二服务器进行访问时,第二服务器便根据访问的域名,利用哈希函数,计算域名的哈希值,再把该哈希值除以模板数量,取余,以该余数对应的编号选取并启用一个模板。
S412:第二服务器将所述调用的网站模板填充内容后提供给网络爬虫服务器抓取。
第二服务器内部可以存储有图片信息,文字信息,链接信息等。第二服务器启用所述调用的网站模板后,可以调用图片信息,文字信息,链接信息等对所述调用的网站模板进行内容填充。网站模板内容填充完毕后,第二服务器可以向网络爬虫服务器发出响应信息,将填充完毕的网站提供给网络爬虫服务器抓取。
在本申请的另一个实施例中,步骤S4还可以这样实现:
S421:第二服务器在预先建立的海量网站中按预设条件调用其中的一套网站,并将所述调用的网站提供给网络爬虫服务器抓取。
第二服务器可以预先建立海量的网站,并给所述海量网站进行编号,所有编号均不重复。例如,第二服务器建立了10000套网站,那么这些网站的编号便是从1至10000。
进一步地,当网络爬虫服务器对第二服务器进行访问时,第二服务器便可以在网站编号范围内随机选取一个编号。第二服务器调用与所述编号相对应的网站,并将所述调用的网站提供给网络爬虫服务器抓取;
或者,当网络爬虫服务器对第二服务器进行访问时,第二服务器便根据访问的域名,利用哈希函数,计算域名的的哈希值,再把该哈希值除以网站数量,取余,以该余数对应的编号选取并启用一个网站提供给网络爬虫服务器抓取。
当然,第二服务器向网络爬虫服务器返回的网站内容也可以包括错误的http状态码,例如404和500这样的http状态码。
在本申请的另一实施例中,上述步骤S1-S3还可以采用以下方案替代:
S101:网络爬虫服务器建立海量域名,并将所述海量域名设置为指向第二服务器的IP地址。
网络爬虫服务器可以直接建立海量的域名,并将所述建立的海量域名与第二服务器的IP地址进行绑定,从而实现所述海量域名到第二服务器IP地址的映射关系。例如,网络爬虫服务器可以在顶级域名test-1000.com的基础上,扩展出海量的子域名,如t1.test-1000.com,t2.test-1000.com,t1999.test-1000.com。进一步地,网络爬虫服务器将所述扩展出的海量子域名与第二服务器的IP地址进行绑定,那么网络爬虫服务器便可以根据所述海量子域名直接对第二服务器进行访问。上述的扩展出的海量子域名可以作为步骤S101中的海量域名。
S201:网络爬虫服务器遍历所述海量域名,并针对每个域名对第二服务器发起抓取请求。
网络爬虫服务器将所述建立的海量域名放入待抓取队列,依次从待抓取队列中取出一个域名,并通过该域名对第二服务器发起抓取请求。
下面介绍本申请以网络爬虫服务器为主体的测试网络爬虫的方法的实施例。
图2是本申请以网络爬虫服务器为主体的测试网络爬虫的方法的一个实施例的流程图。如图2所示,所述以网络爬虫服务器为主体的测试网络爬虫的方法包括:
S110:网络爬虫服务器读取由第一服务器配置的预设数量的顶级域名并根据所述顶级域名扩展出海量域名;
S120:网络爬虫服务器将存储的DNS服务器地址设置为所述第一服务器的地址;
S130:网络爬虫服务器遍历所述海量域名,并针对每个域名向第一服务器发起所述域名到第二服务器IP地址的转换请求;
S140:网络爬虫服务器接收第一服务器发来的根据所述域名转换的第二服务器IP地址,并根据所述第二服务器的IP地址对第二服务器发起抓取请求;
S150:网络爬虫服务器对第二服务器选取的网站进行抓取。
图3是本申请以网络爬虫服务器为主体的测试网络爬虫的方法的另一实施例的流程图。如图3所示,所述以网络爬虫服务器为主体的测试网络爬虫的方法包括:
S210:网络爬虫服务器建立海量域名,并将所述海量域名设置为指向第二服务器的IP地址;
S220:网络爬虫服务器遍历所述海量域名,并针对每个域名对第二服务器发起抓取请求;
S230:网络爬虫服务器对第二服务器选取的网站进行抓取。
下面介绍本申请以第二服务器为主体的测试网络爬虫的方法的实施例。
图4是本申请以第二服务器为主体的测试网络爬虫的方法的一个实施例的流程图。如图4所示,所述以第二服务器为主体的测试网络爬虫的方法包括:
S410:第二服务器预先建立一套网站模板;
S420:第二服务器接收网络爬虫服务器的抓取请求;
S430:第二服务器将所述网站模板填充内容后提供给网络爬虫服务器抓取。
图5是本申请以第二服务器为主体的测试网络爬虫的方法的另一实施例的流程图。如图5所示,所述以第二服务器为主体的测试网络爬虫的方法包括:
S510:第二服务器预先建立至少两套网站模板;
S520:第二服务器接收网络爬虫服务器的抓取请求;
S530:第二服务器按预设条件调用所述网站模板中的一套网站模板;
S540:第二服务器将所述调用的网站模板填充内容后提供给网络爬虫服务器抓取。
图6是本申请以第二服务器为主体的测试网络爬虫的方法的另一实施例的流程图。如图6所示,所述以第二服务器为主体的测试网络爬虫的方法包括:
S610:第二服务器预先建立海量网站;
S620:第二服务器接收网络爬虫服务器的抓取请求;
S630:第二服务器按预设条件调用所述海量网站中的一套网站,并将所述调用的网站提供给网络爬虫服务器抓取。
需要指出的是,以上所有实施例中的测试环境可以是广域网,也可以是局域网,本申请对此不作限定。另外,本申请还可以将建立的海量域名分为N部分,通过第一服务器分别指向位于不同IP地址的服务器1、服务器2…服务器N,此处所述的服务器1、服务器2…服务器N的功能均与本申请中第二服务器的功能一致。同时,网络爬虫服务器可以将所述N部分的海量域名分别放入N个待抓取序列,每次可以对N个域名同时进行抓取,这样可以大幅度提升测试效率。上述方法是在本申请提出的技术方案基础上不付出创造性劳动所做的变形,也应属于本申请的保护范围之内。
本申请还提供一种测试网络爬虫的系统,图7是本申请一种测试网络爬虫的系统第一实施例的功能模块图。如图7所示,所述的一种测试网络爬虫的系统包括第一服务器1,网络爬虫服务器2,第二服务器3,其中:
第一服务器1,用来配置预设数量的顶级域名,并将所述顶级域名设置为指向第二服务器的IP地址;
网络爬虫服务器2,用来读取所述顶级域名并根据所述顶级域名扩展出海量域名,将存储的DNS服务器地址设置为所述第一服务器的地址,遍历所述海量域名,并针对每个域名通过第一服务器获取第二服务器的IP地址,根据所述第二服务器的IP地址对第二服务器发起网站抓取请求;
第二服务器3,用来选取网站,并将所述网站提供给网络爬虫服务器抓取。
图8是本申请一种测试网络爬虫的系统第一实施例中第一服务器的功能模块图。如图8所示,所述的第一服务器1具体包括:
顶级域名配置模块1001,用来配置预设数量的顶级域名;
顶级域名指向模块1002,用来将所述顶级域名设置为指向第二服务器的IP地址;
图9是本申请一种测试网络爬虫的系统第一实施例中网络爬虫服务器的功能模块图。如图9所示,所述的网络爬虫服务器2具体包括:
海量域名配置模块2001,用来读取所述顶级域名并根据所述顶级域名扩展出海量域名;
DNS服务器设置模块2002,用来将存储的DNS服务器地址设置为所述第一服务器的地址;
IP地址获取模块2003,用来针对每个域名,通过第一服务器获取第二服务器的IP地址;
抓取请求发起模块2004,用来根据所述第二服务器的IP地址对第二服务器发起网站抓取请求。
图10是本申请一种测试网络爬虫的系统第二实施例的功能模块图。如图10所示,所述的一种测试网络爬虫的系统包括:网络爬虫服务器4,第二服务器5,其中:
网络爬虫服务器4,用来建立海量域名,将所述海量域名设置为指向第二服务器的IP地址,遍历所述海量域名,并针对每个域名对第二服务器发起抓取请求;
第二服务器5,用来选取网站,并将所述网站提供给网络爬虫服务器抓取。
图11是本申请一种测试网络爬虫的系统第二实施例中网络爬虫服务器的功能模块图。如图11所示,所述的网络爬虫服务器4具体包括:
海量域名建立模块1011,用来建立海量域名;
海量域名指向模块1012,用来将所述海量域名设置为指向第二服务器的IP地址;
抓取请求发起模块1013,用来针对每个所述海量域名,对第二服务器发起抓取请求。
在上述本申请一种测试网络爬虫的系统的实施例中,第二服务器均可以有三种方式实现。
方式一:
图12是本申请一种测试网络爬虫的系统中第二服务器第一实现方式的功能模块图。如图12所示,所述的第二服务器具体包括:
网站模板建立模块3001,用来预先建立一套网站模板;
内容填充模块3002,用来对所述网站模板填充内容;
网站提供模块3003,用来将填充内容后的网站提供给网络爬虫服务器抓取。
方式二:
图13是本申请一种测试网络爬虫的系统中第二服务器第二实现方式的功能模块图。如图13所示,所述的第二服务器具体包括:
网站模板建立模块3011,用来预先建立至少两套网站模板;
网站模板调用模块3012,用来按照预设条件调用所述网站模板中的一套网站模板;
内容填充模块3013,用来对所述调用的网站模板填充内容;
网站提供模块3014,用来将填充内容后的网站提供给网络爬虫服务器抓取。
方式三:
图14是本申请一种测试网络爬虫的系统中第二服务器第二实现方式的功能模块图。如图14所示,所述的第二服务器具体包括:
网站建立模块3021,用来预先建立海量网站;
网站调用模块3022,用来按照预设条件调用所述海量网站中的一套网站;
网站提供模块3023,用来将所述调用的网站提供给网络爬虫服务器抓取。
从上述本申请的实施例可以看出,本申请实施例提供的技术方案模拟出海量的网站提供给网络爬虫进行功能测试,能够在不对真实网站形成打扰的情况下,检测网络爬虫抓取海量网站页面时的工作性能。
本申请实施例提供的技术方案的另一个技术效果是:不需要对网络爬虫系统内的模块逐一进行检测,对网络爬虫系统无侵入性。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(ProgrammableLogicDevice,PLD)(例如现场可编程门阵列(FieldProgrammableGateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片2。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logiccompiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(HardwareDescriptionLanguage,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(AdvancedBooleanExpressionLanguage)、AHDL(AlteraHardwareDescriptionLanguage)、Confluence、CUPL(CornellUniversityProgrammingLanguage)、HDCal、JHDL(JavaHardwareDescriptionLanguage)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardwareDescriptionLanguage)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage)与Verilog2。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(ApplicationSpecificIntegratedCircuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC625D、AtmelAT91SAM、MicrochipPIC18F26K20以及SiliconeLabsC8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。
本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本申请可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
虽然通过实施例描绘了本申请,本领域普通技术人员知道,本申请有许多变形和变化而不脱离本申请的精神,希望所附的权利要求包括这些变形和变化而不脱离本申请的精神。