版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、在线产品即时比价系统设计方案1.1 课题研究的意义1.1.1 课题的现实意义当用户需要购买一件商品时他需要面临一个选择,即在哪个购买自己想要的商品,在这个时候用户会在各大电商中逐一搜索自己想要购买的商品,哪个提供的商品性价比最高,用户就会选择这个进行交易。用户在各大搜索和比较商品无疑是一件费时费力的事情,频繁得在各大电商之间切换,不能很直观的看到这些商品之间的差异。此外,用户多会在一些较大的电商比如淘宝、京东等搜索自己想要购买的商品,却忽略了其它规模较小的电商,用户在不知不觉间就丢失了一些重要的信息。为了应对以上问题,开发一个比价系统是很有必要的。当用户需要购买一件商品时,只需要在比价搜索自己
2、想要的商品,比价会将各大电商的商品信息在同一个页面呈现给用户,用户可以直观的看到各大电商的商品价格差异,同时也能获取其它不知名购物的商品信息,有助于用户完成交易。比价系统对于用户和卖家都是有利的,非常有价值去实现这么一个具有比价功能的系统。1.1.2 课题的学习意义Web系统开发在当前是一个非常热门的领域,越来越多的程序员都在涌向Web开发领域。因此,熟悉一些Web开发中常用的技术是非常有意义的事情。Java、PHP和.net是当今Web开发中最常用的技术。本系统将采用Java来开发,同时了解Java开发Web系统的流程,熟悉Java开发的一些常用技术,对自己以后的发展是很有帮助的,因此开发一
3、个这样的基于Web的网络购物比价系统能够提高自己的竞争力,也可以为将来从事此行业铺好道路。1.2 国外概况1.2.1 比价系统国外发展概况互联网技术的出现和发展极大方便了人们对信息的获取,国外互联网出现的较早,对价格比较系统的研究和开发也比较早。目前国外的比较购物行业已经处于较为成熟的阶段。比较购物已经成为国外网购用户必须借助的网购工具,也成为B2c商家不可或缺的合作伙伴。国比较购物起步的比较晚,一直到2004年,随着互联网的普及,比较购物才开始兴起,但是发展到现在,国也已经出现了不少的比较购物和应用。1.2.2 HTML解析国外发展概况比价系统的核心在于HTML文本的解析,当前用以HTML解
4、析的工具非常多,这些工具由各种语言开发,很多工具都有多语言版本。国外可用以HTML解析的库相当多,主要如下:HTMLParser。该库是一个对HT虬进行分析的快速实时的解析器,最新的发行版本是2.0。JsoupoJsoup是一款Java的HTML解析器,可直接解析某个URL地址、HTML文本容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于JQue0的操作方法来取出和操作数据。jsoup的主要功能如下:从一个URL,文件或字符串中解析HTML;使用DOM或CSS选择器来查找、取出数据;可操作HTML元素、属性、文本;jsoup是基于MIT协议发布的,可放心使用于商业项目。Neko
5、HTML0NekoHTML是一个Java语言的HTML扫描器和标签补全器(tagbalancer),使得程序能解析HTML文档并用标准的XML接口来访问其中的信息。这个解析器能够扫描HTML文件并“修正”许多作者(人或机器)在编写HTML文档过程中常犯的错误。NekoHTML能增补缺失的父元素、自动用结束标签关闭相应的元素,以及不匹配的嵌元素标签oNekoHTML的开发使用了XercesNativeInterface(XNI),后者是Xerces2的实现基础。JTidyoJTidy是HTMLTidy用Java语言实现的版本,提供了一个HTML的语法检查器和很好的打印功能。JTidy可以用来清除
6、格式不好和不对的HTML。此外,JTidy提供了对整个HTML的DOM分析器。程序员可以将JTidy当作一个处理HTML文件的DOM解析器来使用。HTMLCleaneroHTMLCleaner是一个开源的Java语言的HTML文档解析器。HTMLCleaner能够重新整理HTML文档的每个元素并生成结构良好(Well-Formed)的HTML文档。默认它遵循的规则是类似于大部份web浏览器为创文档对象模型所使用的规则。然而,用户可以提供自定义tag和规则组来进行过滤和匹配。MozillaParseroMozillaParser是一个Java的HTML解析类库,基于mozilla的HTML解析器
7、,提供了Java类到Mozilla类的一个桥接,输入一个HTML文本,输出一个Java的Document对象。Jerry。Jerry是Jodd工具包中的一个HTML解析工具。它有点像是用Java实现的jQuery。Jerry是一个高效简洁的Java库,用来简化HTML的解析,遍历和操作。Jerry的API在设计的时候完全向jQuery靠拢,几乎和jQuery一样,所以有时候你可以直接copyjQue:ry的代码来用。当然,也有些代码做不到一样,毕竟执行的环境差了很多。Jerry是一个静态的HT虬解析工具,所以jQuy的动态功能Jeiy是没有的,例如Ajax,动画等等。Scrender。Scre
8、nder是一个用来生成网页缩略图的Java类库,基于SWT开发。它实质上是调用本地浏览器引擎对要进行截图的进行渲染,然后保存该网页的缩略图。在本系统中采用Jsoup来进行HTML文本解析,灵活、高效地使用Jsoup也是整个系统的关键所在。1.3 课题主要容1.3.1 课题任务本课题将实现一个简单的网络购物比价系统,系统需达到如下要求:本系统主要是对在淘宝网、京东网和亚马逊网三大购物中的相同产品的信息进行抽取。本系统的重点是实现使用HTML页面爬取功能获取产品数据,对获取到的网页数据进行抽取分析,最后以Web页面形式呈现出来。本系统的难点是使用HTML页面爬取功能获取产品数据,对获取到的网页数据
9、进行抽取分析,结构化抽取的数据和信息。1.3.2毕设主要容毕设根据课题任务实现了一个实时爬取淘宝网、京东网和亚马逊网的商品信息的比价系统。系统具有如下特点:(1)系统能够分别从淘宝、京东和亚马逊三个爬取相关商品信息,商品的信息包括商品、商品图片、商品价格、商品名(也指商品简介)。系统可以在同一个页面中同时显示三大电商的相关商品信息,用户可以从页面中看到不同电商的商品价格差异;(2)商品的关键字匹配是在电商完成,电商的搜索结果是比较准确的,系统将搜索结果直接拿来使用,保证了商品关键字的较高匹配度;(3)系统设计为实时爬取。系统的这个特性保证了系统爬取到的信息的准确度,能够很好应对两大电商的价格浮
10、动和商品的新旧更替;(4)系统的默认排序为三个电商商品的交替排序,并且这些排序是经过相似度算法处理的;(5)系统可以选择不同的电商(这里只做了三个)的商品;(6)系统没有较明显的大BUG,不影响用户的使用体验;(7)系统主要分为3个层级:业务逻辑层、数据爬取层、视图层。三个层级协调工作,共同实现整个系统的功能。2系统设计方案2.1 两种系统设计方案比价系统要做的事情主要是:爬取多个电商的商品信息,将这些商品的信息同时呈现给用户。然而商品数目繁多,系统需要在众多的商品中搜索出符合用户要求的商品。关于在何时何地进行商品的搜索产生了2种不同的方案-数据库法和即时爬取法。数据库法需要经常更新数据库数据
11、,而即时爬取法则更适合本系统的设计目的。在2.1.1和2.1.2小节将会详述2种方案的细节,以及两种方案的优缺点。2.1.1 方案1数据库法在该方案中,系统已经事先爬取了各大电商几乎所有的商品信息,然后将每种商品的主要信息(商品价格、商品主页、商品图片、商品简介)存储在服务器的数据库当中,并将每种商品在数据库的索引和其关键字信息通过检索/索引工具(比如:Lucene)在磁盘建立索引文件。当用户在比价系统的搜索栏中输入关键字并点击搜索按钮时,系统获取了这一关键字,然后通过检索/索引工具的检索功能获取一系列符合要求的商品的索引,然后将这些商品的信息从数据库取出,通过jsp技术动态生成网页提交给用户
12、的客户端浏览器。方案1的系统流程见图2.1。(1)方案优点爬取模块和响应客户端的模块相对较独立,爬取模块可在空闲时爬取商品信息。商品检索在服务器端执行,响应速度较快。(2)方案缺点每个电商的商品数量都是非常大的,再加上多个电商,总的商品量就相当大,然而电商的数据库不可能开放给外界直接进行访问,系统需要通过电商的商品页面来获取商品信息。假设每个商品都对应一个页面,那么就是海量的数据要进行处理。每爬取一次都要耗费大量的资源,带来一定的开销,然而这些商品的数据并不是一成不变的,需要经常更新来确保数据的准确性。图2.1方案1数据库法2.1.2 方案2即时爬取法方案1的实现类似于搜索引擎,方案2则与方案
13、1大不相同。方案2中商品的信息并不存储在系统服务器端的数据库中。当用户提交关键字时,服务器端将关键字提交给各大电商,然后将各大电商的搜索结果页中爬取商品信息,将爬取到的信息经过处理再动态生成网页提交给用户。方案2的系统流程见图2.2.(1)方案优点较灵活,可良好应对商品信息经常变更的情况。在服务器不需要数据库来存储数据,消除了数据的维护成本。(2)方案缺点用户在客户端每提交一次关键字服务器就要在各大电商再提交一次关键字,然后实时爬取商品信息再反馈给用户的客户端浏览器,需要花费时间等待系统把产品页面数据下载下来,而且每次面向用户服务都要对各大电商商品页面信息页面进行解析,耗时耗资源,特别是在数据
14、源很多的情况下。客户 端浏 览器业务逻虐层视图层数据爬取层京东商城亚马逊商城比价系统图2.2方案2即时爬取法2.2 方案选择最终实现方案:方案2即时爬取法。在方案1(见图2.1)当中,一次性抓取所有电商的所有信息要耗费大量的时间,而且在此期间对于大量网页的解析需要进行大量的运算,在此抓取周期还可能发生各种不可预知的因素,而且整个抓取模块还受限于PC机的性能和网络环境等因素,综合以上因素方案1并不适合作为毕业设计的最终方案。而方案2较容易实现,虽然用户每次访问都要做较大量的运算,并行服务性能定然不强,但并不用事先抓取海量的商品信息,相对于方案1较容易实现。综合以上分析的情况,选定方案2作为系统的
15、最终实现方案。2.3 开发技术与开发环境2.3.1JSP技术Web领域开发技术众多,像.NET、JSP、PHP等。本系统主要使用JSP技术来实现。JSP是由SUN公司倡导、其它公司参与一起建立的一种动态技术标准。在传统的网页HTML文件中加入JAVA程序片段和JSP标签,就构成了JSP网页。JAVA程序片段可以操作数据库、重新定向网页等,实现建立动态所箫的功能,所有程序操作都在服务器端执行,并将动态建立的HTML网页发送给客户端浏览器。而浏览器与开发技术无关,浏览器只负责解析渲染HTML页面。JSP技术优势。由于JAVA跨平台的特性,可以一次编写处处运行。代码在跨平台时不用做大量的修改。JAV
16、A具有强大的可伸缩性,由多台服务器进行集群和负载均衡再到多态Application进行事务处理,消息处理,一台服务器到无数台服务器,JAVA显示了一个巨大的生命力。JAVA还有功能强大的和多样化的开发工具支持。很多开发工具免费提供给开发者和学习者。此外JAVA还有很多服务器端组件的支持JSP技术劣势。JAVA的跨平台特性源于其特殊的运行方式。JAVA编译成字节码后要在JVM中运行。这样大大降低了执行效率。同时JAVA庞大繁多的框架与组件支持也加大了其系统的复杂性以及学习者的压力。2. 3.2HTML解析技术Jsoup介绍系统使用HTML解析库Jsoup来对网页进行解析ojsoup是一款Java
17、的HTML解析器,可直接解析某个URL地址、HTML文本容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。jsoup的主要功能如下:(1)从一个URL,文件或字符串中解析HTML;(2)使用DOM或CSS选择器来查找、取出数据;(3)可操作HTML元素、属性、文本;jsoup是基于MIT协议发布的,可放心使用于商业项目。jsoup的主要类层次结构如下图所示:ClassHierarchyojavalangObjectoorgjsovpnodesAttribute(impJementsjavalangCloaeable,向autlMapEntr
18、y)。orgjsoupnodesAttributes(implementsjavalangCloneaWe.javalangtterabie)oorgjsoupnodesDocumentOutputSettings(implementsjavalangCloneable)。orgjsoupnodesEjsoupnodesEvaluatoroorgjsoupnodesNode(impiementspvalangCloneable)oocgjsoupnodesCommentoorgjsoupnodesDataNodeoorgjsoupnodesElementoorgjsoup
19、.nodesDocumentoorgjsoupnocksTextNodecorgjsoupnodesXmlOeclaration图2.3Jsoup类层次结构图3. 3.3系统开发环境JAVA是一个跨平台的语言,相应的JSP技术也可以在多平台下做开发。本系统在Windows764bit下搭建开发与运行环境。(1) JDK1.6JDK(JavaDevelopmentKit)是SunMicrosystems针对Java开发人员的产品。JDK是整个Java的核心,包括了Java运行环境、Java工具和Java基础类库。(2) IntellijIDEA13IDEA全称是IntellijIDEA,是jav
20、a语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、Ant、JUnit、CVS整合、代码审查、创新的GUI设计等方面的功能可以说是超常的。IDEA是JetBrains公司的产品,这家公司总部位于捷克国的首都布拉格,开发人员以严谨著称的东欧程序员为主。(3) TomcatTomcat是Apache软件基金会(ApacheSoftwareFoundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet和JSP规总是能在
21、Tomcat中得到体现,Tomcat5支持最新的Servlet2.4和JSP2.0规。因为Tomcat技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web应用服务器。目前最新版本是8.0,而本系统采用的是版本Tomcat6.0。3系统总体设计3.1系统总体架构系统采用JAVAEE技术开发。系统主要分为3个层次:业务逻辑模层、数据爬取层块、视图层。该系统虽不是严格的MVC模式,却与MVC模式具有很大的相似性。业务逻辑层。该层负责将浏览器提交的参数进行简单的处理,通过相关逻辑功能,分别生成三大电商的URL,将URL作为参数提交给数据爬取层
22、。该层相当于MVC里面的Co数据爬取层。数据爬取层以业务逻辑层提交的URL作为参数,对该URL对应的商品页面进行解析,获取页面的商品列表,针对商品列表中的每一件商品逐个解析,最后把爬取到的商品数据封装在对象数组中,返回给业务逻辑层。该层相当于MVC里面的Mo视图层。视图层是直接面向用户的一个层,该层包含了一个静态的HTML页面和一个动态的JSP页面。静态的HTML页面是系统的主页,主要负责向系统提交用户的搜索关键字。动态页面主要用来显示搜索的结果,同时也提供同静态HTML页面相同的功能。系统总体架构图如图3.1所示。图3.1系统总体架构图32每层简要设计接口是软件开发领域的一个重要的概念。接口
23、可以用来定义软件体系中不同层次之间的通信规则。在软件开发的过程中,开发者将系统分为多个层次,每个层次实现特定的功能,并为各个层次之间的通信建立接口标准,这样只要每个层次的满足了接口标准,在某一层需要改动的时候其它层不需要进行改变。接口屏蔽了每一层的实现细节,同时保证了程序模块的重用性。本系统分为三个层次:业务逻辑层、数据爬取层、视图层。业务逻辑层根据用户的请求生成三大电商的URL,将URL提交给数据爬取层;同时业务逻辑层还将数据爬取层返回的商品数据进行简单的处理,将其返回给视图层。数据爬取层根据业务逻辑层提交的URL爬取该页面的商品数据,将数据封装在对象数组中并返回给业务逻辑层。视图层根据业务
24、逻辑层返回的商品数据,动态生成HTML页面,将其提交绐用户端的浏览器。业务逻辑层。在该层创建时,其构造方法需要以request对象作为参数,该层可以根据request对象获取用户的请求。在该层消亡时,该层需要返回商品数据绐调用层,因此该层需要有一个方法用来获取商品信息并将其返回。可以对该层进行如下框架设计:(1)类:GetltemFromWeb,该类为该层的功能实现类。(2)方法:GetltemFromWeb(HttpServletRequestrequest),该方法为构造方法,创建对象时以request对象作为参数,该类可以通过request对象来获取用户的请求信息。(3)方法:publi
25、cListgetltemlnfoList(),该方法用以获取通过请求获得的商品项信息列表结果集。数据爬取层。该层以页面URL作为参数获取该页面的商品信息。在该层创建时,该层需要获取页面的URL,其构造方法需要以URL作为参数。在该层消亡时,该层需要将爬取到的商品数据返回给调用层。可以对该层进行如下框架设计:(1)接口ItemlnfoListInterface,该接口用于规获取商品项信息列表的类。(2)方法publicListgetltemlnfoList(),该方法爬取URL对应的页面的商品信息,并将其作为返回值返回。视图层。该层可以用两个页面实现。使用静态的HTML网页做系统的主页,该页面的
26、搜索框模仿一淘网的主页搜索框样式。动态的页面使用的是JSP技术实现,该页面负责显示商品的信息,该页面模仿了京东加一淘的搜索结果页的布局。系统的数据流向图见图3.2o浏览器HTML文本商品数据业务逻辑层商品数据数据爬取层HTML文电商网站图3.2系统数据流向图4系统详细设计与实现4.1 系统功能简介本系统只对淘宝网、京东网和亚马逊网3个购物的商品信息进行爬取。系统可以根据用户提交的关键字在淘宝网、京东网和亚马逊网抓取相关商品信息,并将抓取到的信息通过JSP技术动态生成网页提交给浏览器。用户可以在搜索结果页中看到来自三大电商的商品,可以直观地察觉到两大商城的商品价格差异,并不用分别从两大电商的搜索
27、商品,这样节省了用户的时间和精力。在上文中介绍到系统主要由三层构成,下文将详细介绍这三个功能层的设计与实现。4.2 数据爬取层设计与实现数据爬取层的功能:以页面的URL作为参数获取该页面的商品信息,并将商品信息封装在对象数组中。本小节将着重于介绍系统如何从页面的URL获取每件商品的各项基本信息。4.2.1爬取商品列表(1)京东商品列表爬取算法的设计与实现京东搜索得到商品的搜索结果页面见图4.1。在图4.1中,红色方框中的商品才是系统需要爬取的商品。数据爬取层需要将搜索到的结果从大量的商品中分离出来,得到一个列表,然后再对列表中的商品逐一解析。本小节将详细介绍系统如何获取这个列表。 JD服“ c
28、m幽如aW* ,3,* ZiAC* 04图4.1京东商品搜索结果页面 7,c-wca-wiswci非图书商品1非图书商品2非图书商品3图书商品N /li在搜索结果中,京东的的图书和非图书的搜索结果页面结构是不同的,图书和非图书商品在搜索结果页面中的HTML代码对比如下:图书商品1图书商品2图书商品3非图书商品N/li标签ulclass=list-hclearfix”中存放搜索得到的所有商品。获取商品的列表就是将标签ulclass=wlist-hclearfix中的所有子标签li对应的Node结点过滤出来。系统中实现获取搜索结果页面商品列表算法的为类JDItemlnfoList的Getlteml
29、nfoList方法,类JDItemlnfoList同时也是实现数据爬取层的顶层类,该类的成员及简介见表4.1.表4.1类JDItemlnfoList成员简介PagelnfoDatapagedata存储用户请求的页面信息对象pageurl当前需要解析的页面URLpublicJDItemlnfoList(PagelnfoDatapagedatal,Stringurl)构造方法privateListgetltemlnfoList()通过页面URL获取商品列表getltemlnfoList方法可以采取两种方法来获取商品搜索结果的列表。其中一种方法对图书和非图书的HTML结构敏感,另外一种方法对两者的H
30、TML结构不敏感。下文将详细介绍这两种方法。 方法1:对两者的HTML结构不敏感方法1是一种对于两种商品的HTML结构不敏感的方法。图书商品和非图书商品都存放在标签ulclass=list-hclearfix中,系统可以过滤出该标签对应的节点标签对象,并执行该对象的getChildren方法即可获取商品的列表。方法1的优点:简洁、高效、出错机率小。方法1的缺点:getChildren方法获取的列表中会存在大量的空结点,在下一小层对列表中的商品进行解析时会花费额外的开销去处理这些空结点。 方法2:对两者的HTML结构敏感方法2对于两种商品的HTML结构敏感,该方法直接从整棵树中过滤出商品的Gi结
31、点并得到一个列表。然而系统预先并不知晓该页面是图书商品页还是非图书商品页,系统需要同时用两种过滤规则过滤出商品的结点列表。(2)亚马逊商品列表爬取算法设计与实现针对亚马逊的页面商品列表提取算法与京东的基本一样。亚马逊对所有商品的搜索结果页中商品局部HTML结构都是一样的,比京东的更简单。亚马逊搜索结果页的商品信息放在divclass=listView/div中,每件商品的信息放在divid=result.序号class=resultfirstResultRowproductname=商品名字/div中,可以依据上诉规律来设定过滤条件。亚马逊的搜索结果页面结构较统一,并不需要像京东那样需要采用多
32、线程技术针对两种页面进行爬取,除此之外其它的流程和京东模块基本一致,不再赘诉。4.2.2爬取商品基本信息商品的基本信息包括:商品、商品图片、商品价格、商品简介。这些信息全部用字符串来表示,在java中用String来表示。系统用一个类ItemlnfoData来存储单件商品的基本信息。该类有5个数据成员,其定义如下:publicclassItemlnfoDatapublicStringitemUrl;publicStringitemlntro;publicStringitemimage;publicStringitemPrice;publicStringjdid;其中itemUrl是商品的,it
33、emlntro是商品的简介,Itemlmage是商品的图片,itemPrice是商品的价格。系统中所有的商品都需要抓取前4个信息,并且每件商品的信息都存储在ItemlnfoData类型的对象中。对于京东还需要抓取商品的ID存储在jdid中。(1)京东商城商品基本信息抓取算法在京东的搜索栏中提交关键字后,京东根据关键字搜索到符合要求的商品,并将商品按符合度排序。京东在每一页面最多显示36件商品。在上文中讲到,每件商品的信息都放在标签class=list-hclearf放在中的每一个li标签中。标签都放中的结构如下:1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 诺基亚(NOKIA)
34、商品简介及关键词11. 12. 13. 14. 15. 16. 17. 商品的HTML文本中第1行为该商品的ID号,第4行的image标签中存放了商品的图片,第9行的标签a中存放了商品的主页,第10行是商品的简介。类JDItemlnfoList用来从商品列表爬取商品的基本信息,其核心方法为getltemlnfoListo类JDItemlnfoGet各成员简介见表4.3。表4.3类JDItemlnfoList方法简介PagelnfoDatapagedata存储当前搜索分页信息publicJDItemlnfoList(PagelnfoDatapagedata)构造方法publicListgetlt
35、emlnfoList()解析商品列表中的每件商品得到其基本信息privatevoidUpdatePrice(Listitemlist)当爬取商品价格失败时调用此方法重新爬取商品价格privateJSONArraygetPriceJSONArray(Stringurl)爬取商品价格信息,返回JSOMrray对象HTML文本中的每个Node结点都存在于一棵Node书中。京东的每件商品在Node树中的局部结构见图4.30类JDItemlnfoGet中有一个私有的方法OneltemlnfoGet用来获取单件商品的基本信息。GetAbayFromList方法中会调用该方法来对每件商品进行解析。下文将从4
36、个方面对OneltemlnfoGet获取商品基本信息的详细实现进行讲诉。图4.3单件商品在Node树中的结构对于京东的抓取模块在抓取商品基本信息前需要抓取商品的ID,商品的ID在图4.3中顶层父结点中即属性sku的值。A.获取商品与商品简介在4.3.1节中,京东每件商品的信息放在li中,而li中又有许多子标签,标签atarget=_blank及其子标签中存放了商品的,以京东中的某一件商品为例,其HTML结构如下:【销售冠军】圣优新款休闲男鞋版潮流时尚板鞋驾车鞋男士英伦防滑鞋子透气网鞋深兰42码标准运动鞋码fontstyle=color:#ff0000class=adwordsid=*,AD_1
37、022922287,X/font在标签divclass=p-name及其子标签中存有商品的主页和商品的简介。其在Node树中的结构见图4.4。图4.4中第二层的结点存有商品的主页信息,第三层所有的结点存有商品的所有简介信息。可以把第三层的所有子结点全部转换为字符串,用来在视图层中显示商品的简介。图4.4p-name局部结构B.获取商品图片商品的图片信息存储在标签divclass=p-img的子标签:1哨中,以某件商品为例,其该部分的HTML结构如下:在爬取到的HTML文档中的image标签中有一个属性名为data-lazyload的属性,其原本应该为srcoC.获取商品价格商品的价格信息一般存
38、储在divclass=p-price的子标签中,京东的商品价格有时候直接显示在其HTML文本中,然而在更多情况下HTML文本中并没有价格信息,这种情况是因为京东使用了AJAX技术以根据商品的ID动态获取商品的价格,因此对于京东爬取模块需要额外爬取商品的ID。以某件商品为例,其HTML结构如下:28.00(然而在更多情况下此处并没有价格信息)由于在很多情况下在上述HTML文本中的标签strongclass=wJ_1024062417”后边并没有商品的价格信息,此时就需要其它的方法来获取商品的价格。类JDItemlnfoList提供了LpdatePrice方法来获取商品的价格。京东的页面使用JS通
39、过get提交的方式来获取商品的价格。以某页面为例,其get提交的URL格式如下:在以上URL中,每个J_后边的数字就是商品的ID,将以上URL通过浏览器打开会在浏览器看到上述所有ID对应的商品的价格,见图4.5。rHid、cj02222228T、Ja】430T,1/:25600匕ridTJ_1024O624jr/p:L39.00Wr259.00Fid:n_1003061g4 Jd”Vid:!。13716638 p J 1142446514,| rid/J 1016888940/p fide:nJ 1。8425783 JpV id:叮_ 10 8 6756 7 Wid;cj.K)g7307848
40、Wid2201665 p ri(r:_10?668689】p rider(次“#Ntttr/八3nre的曲角的细4,|U|。2e=n匕匕o:,flQ4HxM0Ma*oheaa/iftnia/T/4QXrryBOtoL316nek”hMxShNale:至6珏加A:widh-116*hiahfil6/,3八clAaa*vprocJCtXUtadlvclaBa-proAactTLtlX(“fctawvtftfMag6/“川。血34皿/的加03!11;7皿极r安及律男土H醐母嫌体纲男收融复。如簿力忠凝于c”卜八11*3ivcWksvPrse。Ab。;rtrikX35C.CCI,25,苍142.。”心I
41、44vclAavaM*nb卬,v,divda、faetrrwai*,p0”2叩Op*.*,双在存贷elt-*t*r*ArzUrm*olAA*AtjkrAaxepAAclAavcrJlT3tT*(axjlaawhlta-apac*:no-xvap;,xapanolaaa*MlnJt*vl*v*fi&ayvdOCCCSSTJSS,r_i_l_c_cr_acr_ji|*_-g二axg,。豌;r8jgC-remo/bXX-8Glnj”La/fafeci6/6Nr64-0.Vi夕22Ng一alCvitt3F-fi5*al二.平均0愿“allfn*AftflbftSiSM*OlL平均JRh“g:=12do
42、rniwp;(2CgI/av“znx“zn、OXVG&4a*VQF必a2NS329EfiSZ29ca2Q、京&历有 IQ Q4Q 小庖晶,八、P7.修就图4.6亚马逊商品4.2.3爬取分页相关信息当对一个商品进行搜索时,往往会匹配出多件商品,有时候商品的数目过多需要进行分页显示。于是本系统对分页的情况进行了处理。系统的分页功能需要靠一个类来实现:publicclassPagelnfoDatapublicintpage;publicintjdpage;publicintazpage;publicinttbpage;publicStringkey;publicStringkey_gbk;publi
43、cStringkey_utf8;类PagelnfoData封装了一些关键信息。page表示用户当前向系统请求的页码,当用户使用搜索时该变量的值为1或者用户通过第2页的“上一页”请求第1页时该变量的值也为1.jdpage表示系统在一次响应用户的请求时,京东商城对于该商品的搜索结果的分页数。azpage表示系统在一次响应用户的请求时,亚马逊商城对于该商品的搜索结果的分页数。tbpage表示系统在一次响应用户的请求时,网对于该商品的搜索结果的分页数。key为搜索关键字。key_gbk和key_utf8表示用户向系统提交的关键字。两者的编码格式不同,第一个为gbk编码第二个为utf-8编码。系统在一次
44、响应用户的请求中只会实例化一个PagalnfoData的对象,该对象在系统的整个流程的开始和结尾部分都起到重要的作用。该对象在系统中几乎是全局的,绝大多数核心的功能类都有专门的数据成员来存储该对象的引用。在业务逻辑层、数据爬取层、视图层,都有涉及到该对象的操作,以该对象为基础的分页机制是不可分割的,所以单独把该对象拿出来结合分页机制进行叙述,在其它部分就不再对该对象及其相关的逻辑进行讲诉。(1)在逻辑业务层用户访问系统的URL格式一般为:localhost:8080/0PPCS/search.jsp?key=商品名&page=当前页码&JD=京东总页数&AZ=京东总页数&TB=淘宝总页数或:l
45、ocalhost:8080/0PPCS/search.jsp?key二商品名对于第一种格式(方式1)是用户点击“上一页”或“下一页”的邻页请求,第二种格式(方式2)是由表单提交给系统的搜索请求。对于方式1,一定有page参数大于lo在此方式下,业务逻辑层实例化一个PagalnfoData类型的对象pagedata,将参数page的值赋值绐对象的成员page,将参数JD、AZ和TB的值分别赋值给对象的成员jdpage.azpage和tbpage,将参数key的值以utf-8和gbk两种编码格式分别赋值绐key_utf8和key_gbko业务逻辑层在生成URL的过程中会判断pagedata的成员p
46、age分别与jdpage、azpage和tbpage的大小关系,用以生成URL,当jdpage、azpage和tbpage分别小于page时,不对该生成URL。(2)在数据爬取层在数据爬取层,要把三大的商品的总页数爬取出来分别保存到pagedata中的jdpage、azpage和tbpage中(3)在视图层在视图层,系统根据pagedata的成员page与totalnum和1的关系来确定当前页面是否放置“上一页”和“下一页”的,详细请见4.3.2小节。4.3业务逻辑层和视图层设计与实现4.3.1业务逻辑层在4.3节的概要中介绍到用户主要向服务器提交2种信息:搜索关键字和邻页请求。业务逻辑层的关
47、键在于将用户提交的信息处理并生成电商的URL,将URL提交给数据爬取层进行数据爬取。系统中负责业务逻辑的类叫做GetltemFromWeb,其成员及简介见表4.4.表4.4类GelltemFromWeb的成员及简介成员简介HttpServletRequestrequest存储JSP页面的request对象引用PagelnfoDatapagedata存储用户请求的页面相关状态信息PublicGetltemFromWebdlttpServletRequestrequest1)构造函数privateListgetFirstPageltemlnfoList()当加载第一页时则调用该方法privateL
48、istgetltemlnfoListFromNeighbor()用户提交的是邻页请求则调用该方法publicListgetltemlnfoList()获取商品项信息列表类GetltemFromWeb的核心是getiteminfoListO方法,该方法也是除构造函数外的唯一一个public方法。该方法用来响应用户的请求。它需要分辨出用户的请搜索一件商品还是请求某一页面的邻页,具体实现见4.2.3小节。当用户向服务器提交的是邻页请求时,会调用getltemlnfoListFromNeighbor()方法,否则调用getFirstPageltemlnfoList()方法。这两个方法分别以搜索和邻页的
49、特定URL结构生成URL然后调用数据爬取层。为了达到相似或相同名称的产品的比较目的,本系统在业务逻辑层使用了字符串相似度计算算法,关于该算法的详细介绍见附录。4.3.2视图层系统的视图部分由直接面向用户的Web页面实现。系统中一共有两个Web页面:系统主页面和搜索结果页面。下文将从这个方面来详细介绍系统的视图层。(1)系统主页用户首次访问系统需要先经过主页。主页的效果见图4.7。主页采用了一淘网主页的CSS布局。主页上主要由3部分组成:电商、文本框、搜索按钮。搜索框上方有各大电商的,便于用户快速进入自己想要访问的电商。系统主页的功能很简单,页面的核心是一个form表单,该表单在用户点击搜索按钮时负责将用户输入的关键字提交给系统。全网 京东网亚马逊淘宝网图4.7系统主页二B2ES二本5EE;见马趁匚雷宝的nA 炉* am Ma5x:上子8我出,史依收跌用 尚青g隹口炳6开丰&W*;hw.包后令维保伯玄史府於3) 帧近六帆R布依拿壬关亨生右%三:wars黑玉眠毛泥r钿传彷 百,山KI依RJS旺G史他H28.8020.80“29.00:包f/北空布
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 微波炉采购合同(3篇)
- 幼儿园老师开家长会发言稿
- 中队长述职报告范文
- 晋升转正述职报告
- 销售工作心得体会(35篇)
- 匆匆的读书心得感想(33篇)
- 五年级下册英语第4单元单词表
- 青海省西宁市(2024年-2025年小学五年级语文)人教版阶段练习(下学期)试卷及答案
- 上海市县(2024年-2025年小学五年级语文)人教版小升初真题(下学期)试卷及答案
- 五年级数学(小数乘除法)计算题专项练习及答案汇编
- 专题 常考的规律探究问题 中考数学答题技巧与模板构建
- 学礼以立大国范 知到智慧树网课答案
- 生物信息学(上海海洋大学)智慧树知到期末考试答案章节答案2024年上海海洋大学
- 2024年全国高考体育单招考试语文试卷试题(含答案详解)
- 大国工匠徐立平
- 《工程建设标准强制性条文电力工程部分2023版》
- 下丘脑疾病课件
- 力的合成说课课件省公开课金奖全国赛课一等奖微课获奖课件
- 慢阻肺患者随访记录表(参考样表)
- 中国农业文化遗产与生态智慧智慧树知到期末考试答案章节答案2024年浙江农林大学
- 2024年招录考试-大学毕业生士兵提干笔试参考题库含答案
评论
0/150
提交评论