在线产品即时比价系统设计方案_第1页
在线产品即时比价系统设计方案_第2页
在线产品即时比价系统设计方案_第3页
在线产品即时比价系统设计方案_第4页
在线产品即时比价系统设计方案_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、在线产品即时比价系统设计方案11课题研究的意义1.1.1课題的现实意义当用户需要购买一件商品时他需要面临一个选择,即在哪个购买自己想要的商品, 在这个时候用户会在各大电商中逐一搜索自己想要购买的商品,哪个提供的商品性价 比最高,用户就会选择这个进行交易。用户在各大搜索和比较商品无疑是一件费时费力的事情,频繁得在各大电商之间 切换,不能很直观的看到这些商品之间的差异。此外,用户多会在一些较大的电商比 如淘宝、京东等搜索自己想要购买的商品,却忽略了其它规模较小的电商,用户在不 知不觉间就丢失了一些重要的信息。为了应对以上问题,开发一个比价系统是很有必要的。当用户需要购买一件商品 时,只需要在比价搜

2、索自己想要的商品,比价会将各大电商的商品信息在同一个页面 呈现给用户,用户可以直观的看到各大电商的商品价格差异,同时也能获取其它不知 名购物的商品信息,有助于用户完成交易。比价系统对于用户和卖家都是有利的,非 常有价值去实现这么一个具有比价功能的系统。1.1.2课題的学习意义Web系统开发在当前是一个非常热门的领域,越来越多的程序员都在涌向Web开发 领域。因此,熟悉一些Web开发中常用的技术是非常有意义的事情。Java、PHP和.net 是当今Web开发中最常用的技术。本系统将采用Java来开发,同时了解Java开发Web 系统的流程,熟悉Java开发的一些常用技术,对自己以后的发展是很有帮

3、助的,因此 开发一个这样的基于Web的网络购物比价系统能够提高自己的竞争力,也可以为将来 从事此行业铺好道路。12国外概况1.2.1比价系统国外发展概况互联网技术的出现和发展极大方便了人们对信息的获取,国外互联网出现的较早, 对价格比较系统的研究和开发也比较早。目前国外的比较购物行业已经处于较为成熟 的阶段。比较购物已经成为国外网购用户必须借助的网购工具,也成为B2C商家不可 或缺的合作伙伴。国比较购物起步的比较晚,一直到2004年,随着互联网的普及,比较购物才开始 兴起,但是发展到现在,国也已经出现了不少的比较购物和应用。1.2.2 HTML解析国外发展概况比价系统的核心在于HTML文本的解

4、析,当前用以HTML解析的工具非常多,这些 工具由各种语言开发,很多工具都有多语言版本。国外可用以HTML解析的库相当多, 主要如下:HTML Parser。该库是一个对HTML进行分析的快速实时的解析器,最新的发行版 本是2.0。Jsoupo Jsoup是一款Java的HTML解析器,可直接解析某个URL地址、HTML文 本容。它提供了一套非常省力的API,可通过DOM, CSS以及类似于JQuery的操作方 法来取出和操作数据o jsoup的主要功能如下:从一个URL,文件或字符串中解析HTML; 使用DOM或CSS选择器来查找、取出数据;可操作HTML元素、属性、文本;jsoup是 基于

5、IIT协议发布的,可放心使用于商业项目。NekoHTML。NekoHTML是一个Java语言的HTML扫描器和标签补全器(tag balancer),使得程序能解析HTML文档并用标准的XML接口来访问其中的信息。这个 解析器能够扫描HTML文件并“修正”许多作者(人或机器)在编写HTML文档 过程中 常犯的错误。NekoHTML能增补缺失的父元素、自动用结束标签关闭相应的元素,以及 不匹配的嵌元素标签。NekoHTML的开发使用了 Xerces Native Interface (XNI),后 者是Xerces2的实现基础。JTidyo JTidy是HTML Tidy用Java语言实现的版本

6、,提供了一个HTML的语法 检查器和很好的打印功能。JTidy可以用来清除格式不好和不对的HTMLo此外,JTidy 提供了对整个HTML的D0M分析器。程序员可以将JTidy当作一个处理HTML文件的D0M 解析器来使用。HTMLCleanero HTMLCleaner是一个开源的Java语言的HTML文档解析器。 HTMLCleaner能够重新整理HTML文档的每个元素并生成结构良好(Well-Formed)的 HTML文档。默认它遵循的规则是类似于大部份web浏览器为创文档对象模型所使用的 规则。然而,用户可以提供自定义tag和规则组来进行过滤和匹配。MozillaParser Mozi

7、llaParser 是_个 Java 的 HTML 解析类库,基于 mozilla 的HTML解析器,提供了 Java类到Mozilla类的一个桥接,输入一个HTML文本,输 出一个Java的Document对象。Jerry。Jerry是Jodd工具包中的一个HTML解析工具。它有点像是用Java实现 的jQuery0 Jerry是一个高效简洁的Java库,用来简化HTML的解析,遍历和操作。 Jerry的API在设计的时候完全向jQuery靠拢,几乎和jQuery 一样,所以有时候你 可以直接copy jQuery的代码来用。当然,也有些代码做不到一样,毕竟执行的环境 差了很多。Jerry是

8、一个静态的HTML解析工具,所以jQuery的动态功能Jerry是没 有的,例如Ajax,动画等等。Scrender0 Scrender是一个用来生成网页缩略图的Java类库,基于SWT开发。它 实质上是调用本地浏览器引擎对要进行截图的进行渲染,然后保存该网页的缩略图。在本系统中釆用Jsoup来进行HTML文本解析,灵活、高效地使用Jsoup也是整个 系统的关键所在。1.3课题主要容1.3.1课题任务本课题将实现一个简单的网络购物比价系统,系统需达到如下要求:本系统主要是对在淘宝网、京东网和亚马逊网三大购物中的相同产品的信息进行 抽取。本系统的重点是实现使用HTML页面爬取功能获取产品数据,对

9、获取到的网页数 据进行抽取分析,最后以Web页面形式呈现出来。本系统的难点是使用HTML页面爬取 功能获取产品数据,对获取到的网页数据进行抽取分析,结构化抽取的数据和信息。1.3.2毕设主要容毕设根据课题任务实现了一个实时爬取淘宝网、京东网和亚马逊网的商品信息的 比价系统。系统具有如下特点:(1) 系统能够分别从淘宝、京东和亚马逊三个爬取相关商品信息,商品的信息包括 商品、商品图片、商品价格、商品名(也指商品简介)。系统可以在同一个页 面中同时显示三大电商的相关商品信息,用户可以从页面中看到不同电商的商 品价格差异;(2) 商品的关键字匹配是在电商完成,电商的搜索结果是比较准确的,系统将搜索

10、结果直接拿来使用,保证了商品关键字的较高匹配度;(3) 系统设计为实时爬取。系统的这个特性保证了系统爬取到的信息的准确度,能 够很好应对两大电商的价格浮动和商品的新旧更替;(4) 系统的默认排序为三个电商商品的交替排序,并且这些排序是经过相似度算法 处理的;(5) 系统可以选择不同的电商(这里只做了三个)的商品;(6) 系统没有较明显的大BUG,不影响用户的使用体验;(7) 系统主要分为3个层级:业务逻辑层、数据爬取层、视图层。三个层级协调工 作,共同实现整个系统的功能。2系统设计方案2.1两种系统设计方案比价系统要做的事情主要是:爬取多个电商的商品信息,将这些商品的信息同时 呈现给用户。然而

11、商品数目繁多,系统需要在众多的商品中搜索出符合用户要求的商品。关于 在何时何地进行商品的搜索产生了 2种不同的方案-数据库法和即时爬取法。数据库 法需要经常更新数据库数据,而即时爬取法则更适合本系统的设计目的。在2. 1.1和 2. 1.2小节将会详述2种方案的细节,以及两种方案的优缺点。2.1.1方案1数据库法在该方案中,系统已经事先爬取了各大电商几乎所有的商品信息,然后将每种商 品的主要信息(商品价格、商品主页、商品图片、商品简介)存储在服务器的数据库 当中,并将每种商品在数据库的索引和其关键字信息通过检索/索引工具(比如: Lucene)在磁盘建立索引文件。当用户在比价系统的搜索栏中输入

12、关键字并点击搜索 按钮时,系统获取了这一关键字,然后通过检索/索引工具的检索功能获取一系列符合 要求的商品的索引,然后将这些商品的信息从数据库取出,通过jsp技术动态生成网 页提交给用户的客户端浏览器。方案1的系统流程见图2. 1。(1) 方案优点爬取模块和响应客户端的模块相对较独立,爬取模块可在空闲时爬取商品信息。 商品检索在服务器端执行,响应速度较快。(2) 方案缺点每个电商的商品数量都是非常大的,再加上多个电商,总的商品量就相当大,然 而电商的数据库不可能开放给外界直接进行访问,系统需要通过电商的商品页面来获 取商品信息。假设每个商品都对应一个页面,那么就是海量的数据要进行处理。每爬 取

13、一次都要耗费大量的资源,带来一定的开销,然而这些商品的数据并不是一成不变 的,需要经常更新来确保数据的准确性。图2.1方案1数据库法2.1.2方案2即时爬取法方案1的实现类似于搜索引擎,方案2则与方案1大不相同。方案2中商品的信 息并不存储在系统服务器端的数据库中。当用户提交关键字时,服务器端将关键字提 交给各大电商,然后将各大电商的搜索结果页中爬取商品信息,将爬取到的信息经过 处理再动态生成网页提交给用户。方案2的系统流程见图2.2.(1) 方案优点较灵活,可良好应对商品信息经常变更的情况。在服务器不需要数据库来存储数 据,消除了数据的维护成本。(2) 方案缺点用户在客户端每提交一次关键字服

14、务器就要在各大电商再提交一次关键字,然后 实时爬取商品信息再庾馈给用户的客户端浏览器,需要花费时间等待系统把产品页面 数据下载下来,而且每次面向用户服务都要对各大电商商品页面信息页面进行解析, 耗时耗资源,特别是在数据源很多的情况下。客户 端浏 览器图2. 2方案2即时爬取法京东商城亚马逊商城2.2方案选择最终实现方案:方案2即时爬取法。在方案1(见图2.1)当中,一次性抓取所有电商的所有信息要耗费大量的时间,而 且在此期间对于大量网页的解析需要进行大量的运算,在此抓取周期还可能发生各种 不可预知的因素,而且整个抓取模块还受限于PC机的性能和网络环境等因素,综合以 上因素方案1并不适合作为毕业

15、设计的最终方案。而方案2较容易实现,虽然用户每 次访问都要做较大量的运算,并行服务性能定然不强,但并不用事先抓取海量的商品 信息,相对于方案1较容易实现。综合以上分析的情况,选定方案2作为系统的最终 实现方案。23开发技术与开发环境2. 3.1 JSP 技术Web领域开发技术众多,像.NET、JSP、PHP等。本系统主要使用JSP技术来实现。 JSP是由SUN公司倡导、其它公司参与一起建立的一种动态技术标准。在传统的网页 HTML文件中加入JAVA程序片段和JSP标签,就构成了 JSP网页。JAVA程序片段可以 操作数据库、重新定向网页等,实现建立动态所需的功能,所有程序操作都在服务器 端执行

16、,并将动态建立的HTML网页发送给客户端浏览器。而浏览器与开发技术无关, 浏览器只负责解析渲染HTML页面。JSP技术优势。由于JAVA跨平台的特性,可以一次编写处处运行。代码在跨平台 时不用做大量的修改。JAVA具有强大的可伸缩性,由多台服务器进行集群和负载均衡 再到多态Application进行事务处理,消息处理,一台服务器到无数台服务器,JAVA 显示了 一个巨大的生命力。JAVA还有功能强大的和多样化的开发工具支持。很多开发 工具免费提供给开发者和学习者。此外JAVA还有很多服务器端组件的支持JSP技术劣势。JAVA的跨平台特性源于其特殊的运行方式。JAVA编译成字节码后 要在JVM中

17、运行。这样大大降低了执行效率。同时JAVA庞大繁多的框架与组件支持也 加大了其系统的复杂性以及学习者的压力。2. 3. 2 HTML解析技术Jsoup介绍系统使用HTML解析库Jsoup来对网页进行解析ojsoup是一款Java的HTML解析 器,可直接解析某个URL地址、HTML文本容。它提供了一套非常省力的API,可通过 DOM, CSS以及类似于jQuery的操作方法来取出和操作数据。jsoup的主要功能如下:(1) 从一个URL,文件或字符串中解析HTML;(2) 使用DON或CSS选择器来查找、取出数据;(3) 可操作HTML元素、厲性、文本;jsoup是基于MIT协议发布的,可放心

18、使用于商业项目。jsoup的主要类层次结构如下图所示:Class Hierarchyo java lar9 Objecto org jsovp nodes Anribute (impJements java lang Cloaeable、*3 util Map Entry)o org jsoup nodes Attributes (implements java lang CloneaWe. java lang tterabie)o org jsoup nodes DocumentOutputSettings (implements javaang Cloneable)o org jsoup

19、nodes Entitieso org jsoup nodes Evaluatoro org jsoup nodes Node (impiements pva lang Cloneable)o ocg jsoup nodes Commento org jsoup nodes DataNodeo o(9 jsoup nodes Elemento org jsoup. nodes Documento org jsoup nodes TextNodec org jsoup nodes XmlOeclaration图2.3 Jsoup类层次结构图2. 3.3系统开发环境JAVA是一个跨平台的语言,相应

20、的JSP技术也可以在多平台下做开发。本系统在 Windows7 64bit下搭建开发与运行环境。(1) JDK1.6JDK (Java Development Kit)是 Sun Microsystems 针对 Java 开发人员的产品。 JDK是整个Java的核心,包括了 Java运行环境、Java工具和Java基础类库。(2) Intellij IDEA 13IDEA全称是Intellij IDEA,是java语言开发的集成环境,IntelliJ在业界被公 认为最好的java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE 支持、Ant. JUnit. CVS整合、代码审查、

21、创新的GUI设计等方面的功能可以说是超 常的。IDEA是JetBrains公司的产品,这家公司总部位于捷克国的首都布拉格,开发 人员以严谨著称的东欧程序员为主。(3) TomcatTomcat 是 Apache 软件基金会(Apache Software Foundation)的 Jakarta 项目 中的一个核心项目,由Apache. Sun和其他一些公司及个人共同开发而成。由于有了 Sun的参与和支持,最新的Servlet和JSP规总是能在Tomcat中得到体现,Tomcat 5支持最新的Servlet 2.4和JSP 2. 0规。因为Tomcat技术先进、性能稳定,而且 免费,因而深受J

22、ava爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较 流行的Web应用服务器。目前最新版本是&0,而本系统采用的是版本Tomcat 6.0。 3系统总体设计3.1系统总体架构系统采用JAVA EE技术开发。系统主要分为3个层次:业务逻辑模层、数据爬取 层块、视图层。该系统虽不是严格的MVC模式,却与IVC模式具有很大的相似性。业务逻辑层。该层负责将浏览器提交的参数进行简单的处理,通过相关逻辑功能, 分别生成三大电商的URL,将URL作为参数提交给数据爬取层。该层相当于MVC里面 的Co数据爬取层。数据爬取层以业务逻辑层提交的URL作为参数,对该URL对应的商 品页面进行解析,获取页面的

23、商品列表,针对商品列表中的每一件商品逐个解析,最 后把爬取到的商品数据封装在对象数组中,返回给业务逻辑层。该层相当于MVC里面 的Mo视图层。视图层是直接面向用户的一个层,该层包含了一个静态的HTML页面和一 个动态的JSP页面。静态的HTML页面是系统的主页,主要负责向系统提交用户的搜索 关键字。动态页面主要用来显示搜索的结果,同时也提供同静态HTML页面相同的功能。 系统总体架构图如图3.1所示。图3.1系统总体架构图32每层简要设计接口是软件开发领域的一个重要的概念。接口可以用来定义软件体系中不同层次之间的通信规则。在软件开发的过程中,开发者将系统分为多个层次,每个层次实现 特定的功能,

24、并为各个层次之间的通信建立接口标准,这样只要每个层次的满足了接 口标准,在某一层需要改动的时候其它层不需要进行改变。接口屏蔽了每一层的实现 细节,同时保证了程序模块的重用性。本系统分为三个层次:业务逻辑层、数据爬取层、视图层。业务逻辑层根据用户 的请求生成三大电商的URL,将URL提交给数据爬取层;同时业务逻辑层还将数据爬 取层返回的商品数据进行简单的处理,将其返回给视图层。数据爬取层根据业务逻辑 层提交的URL爬取该页面的商品数据,将数据封装在对象数组中并返回给业务逻辑层。 视图层根据业务逻辑层返回的商品数据,动态生成HTML页面,将其提交给用户端的浏 览器。业务逻辑层。在该层创建时,其构造

25、方法需要以request对象作为参数,该层可 以根据request对象获取用户的请求。在该层消亡时,该层需要返回商品数据给调用 层,因此该层需要有一个方法用来获取商品信息并将其返回。可以对该层进行如下框 架设计:(1) 类:GetltemFromWeb,该类为该层的功能实现类。(2) 方法:GetltemFromWeb ( HttpServletRequest request ),该方法为构造方 法,创建对象时以request对象作为参数,该类可以通过request对象来获取 用户的请求信息。(3) 方法:public List getltemlnfoList (),该方法用以获取通过请 求获

26、得的商品项信息列表结果集。数据爬取层。该层以页面URL作为参数获取该页面的商品信息。在该层创建时, 该层需要获取页面的URL,其构造方法需要以URL作为参数。在该层消亡时,该层需 要将爬取到的商品数据返回给调用层。可以对该层进行如下框架设计:(1) 接口 ItemlnfoListlnterface,该接口用于规获取商品项信息列表的类。(2) 方法 public List getltemlnfoList (),该方法爬取 URL 对应的 页面的商品信息,并将其作为返回值返回。视图层。该层可以用两个页面实现。使用静态的HTML网页做系统的主页,该页面 的搜索框模仿一淘网的主页搜索框样式。动态的页面

27、使用的是JSP技术实现,该页面 负责显示商品的信息,该页面模仿了京东加一淘的搜索结果页的布局。系统的数据流向图见图3.2 oO&4SHTML文本商骷数据视 图 层商品数据浏览器业务逻辑层电商网站HTML文数据爬取层图3.2系统数据流向图4系统详细设计与实现4.1系统功能简介本系统只对淘宝网、京东网和亚马逊网3个购物的商品信息进行爬取。系统可以 根据用户提交的关键字在淘宝网、京东网和亚马逊网抓取相关商品信息,并将抓取到 的信息通过JSP技术动态生成网页提交给浏览器。用户可以在搜索结果页中看到来自 三大电商的商品,可以直观地察觉到两大商城的商品价格差异,并不用分别从两大电 商的搜索商品,这样节省了

28、用户的时间和精力。在上文中介绍到系统主要由三层构成,下文将详细介绍这三个功能层的设计与实 现。4.2数据爬取层设计与实现数据爬取层的功能:以页面的URL作为参数获取该页面的商品信息,并将商品信 息封装在对象数组中。本小节将着重于介绍系统如何从页面的URL获取每件商品的各 项基本信息。4. 2.1爬取商品列表(1)京东商品列表爬取算法的设计与实现京东搜索得到商品的搜索结果页面见图4. 1。在图4. 1中,红色方框中的商品才是 系统需要爬取的商品。数据爬取层需要将搜索到的结果从大量的商品中分离出来,得 到一个列表,然后再对列表中的商品逐一解析。本小节将详细介绍系统如何获取这个 列表。D題”M d

29、Mt f m twuiIMO;? RM TM0 ztecl Z*JX mP3M 卜c-w % ca必lmcc上a to”0F 説l.l * IS OM电bMux - wvnuXCg. :ux 9MVBa er kv图4.1京东商品搜索结果页面在搜索结果中,京东的的图书和非图书的搜索结果页面结构是不同的,图书和非图书商品在搜索结果页面中的HTML代码对比如下: 图书商品1 图书商品2 图书商品3非图书商品1非图书商品2非图书商品3图书商品N非图书商品N标签ul class=list-h clearfixw中存放搜索得到的所有商品。获取商品的列 表就是将标签ul class=wlist-h cle

30、arfix中的所有子标签li对应的Node结点过 滤出来。系统中实现获取搜索结果页面商品列表算法的为类JDItemlnfoList的 GetltemlnfoList方法,类JDItemlnfoList同时也是实现数据爬取层的顶层类,该类 的成员及简介见表4.1.表 4. 1 类 JDItemlnfoList成员简介PagelnfoData pagedata存储用户请求的页面信息对象pageurl当前需要解析的页面URLpublic JDItemlnfoList ( PagelnfoDatapagedatal,String url)构造方法private List getltemlnfoList

31、 ()通过页面URL获取商品列表getltemlnfoList方法可以采取两种方法来获取商品搜索结果的列表。其中一种方 法对图书和非图书的HTML结构敏感,另外一种方法对两者的HTML结构不敏感。下文 将详细介绍这两种方法。 方法1:对两者的HTML结构不敏感方法1是一种对于两种商品的HTML结构不敏感的方法。图书商品和非图书商品都 存放在标签31 class二list-h clearfix中,系统可以过滤出该标签对应的节点标 签对象,并执行该对象的getChildren方法即可获取商品的列表。方法1的优点:简洁、高效、出错机率小。方法1的缺点:getCh订dren方法获取的列表中会存在大量的

32、空结点,在下一小 层对列表中的商品进行解析时会花费额外的开销去处理这些空结点。 方法2:对两者的HTML结构敏感方法2对于两种商品的HTML结构敏感,该方法直接从整棵树中过滤出商品的li 结点并得到一个列表。然而系统预先并不知晓该页面是图书商品页还是非图书商品页, 系统需要同时用两种过滤规则过滤出商品的结点列表。(2)亚马逊商品列表爬取算法设计与实现针对亚马逊的页面商品列表提取算法与京东的基本一样。亚马逊对所有商品的搜 索结果页中商品局部HTML结构都是一样的,比京东的更简单。亚马逊搜索结果页的商品信息放在div class二listView 中,每件商品的信息放在 div id二result

33、.序号class二result firstResultRow product name=w商品名字中,可以依据上诉规律来设定过滤条件。亚马逊的搜索结果页面结构较统一,并不需要像京东那样需要采用多线程技术针 对两种页面进行爬取,除此之外其它的流程和京东模块基本一致,不再赘诉。4.2.2爬取商品基本信息商品的基本信息包括:商品、商品图片、商品价格、商品简介。这些信息全部用 字符串来表示,在java中用String来表示。系统用一个类ItemlnfoData来存储单件商品的基本信息。该类有5个数据成员, 其定义如下:public class ItemlnfoData public String it

34、emUrl;public String itemIntro;public String itemlmage;public String itemPrice;public String jdid;其中itemUrl是商品的,itemlntro是商品的简介,Itemlmage是商品的图片, itemPrice是商品的价格。系统中所有的商品都需要抓取前4个信息,并且每件商品 的信息都存储在ItemlnfoData类型的对象中。对于京东还需要抓取商品的ID存储在 jdid 中。(1)京东商城商品基本信息抓取算法在京东的搜索栏中提交关键字后,京东根据关键字搜索到符合要求的商品,并将 商品按符合度排序。京

35、东在每一页面最多显示36件商品。在上文中讲到,每件商品的 信息都放在标签ul class二list-h clearfix中的每一个li 标签中。标签li 中的结构如下:.5.6. 0.诺基亚(NOKIA)商品简介及关键词7.商品的HTML文本中第1行为该商品的ID号,第4行的image标签中存放了商品 的图片,第9行的标签0中存放了商品的主页,第10行是商品的简介。类 JDItemlnfoList用来从商品列表爬取商品的基本信息,其核心方法为 getltemlnfoListo 类 JDItemlnfoGet 各成员简介见表 4.

36、 3。表 4.3 类 JDItemInfoList方法简介PagelnfoData pagedata存储当前搜索分页信息publ ic JDI temInfoList (PagelnfoData pagedata)构造方法public List getltemlnfoList()解析商品列表中的每件商品得到其基本信息privatevoidUpdatePrice(Listitemlist)当爬取商品价格失败时调用此方法重新爬取商品价格private JSONArray getPriceJSONArray (String url)爬取商品价格信息,返回JSONArray对象HTML文本中的每个No

37、de结点都存在于一棵Node书中。京东的每件商品在Node 树中的局部结构见图4. 30类JDItemlnfoGet中有一个私有的方法OneltemlnfoGet用 来获取单件商品的基本信息。GetArrayFromList方法中会调用该方法来对每件商品进 行解析。下文将从4个方面对OneltemlnfoGet获取商品基本信息的详细实现进行讲诉。图4.3单件商品在Node树中的结构对于京东的抓取模块在抓取商品基本信息前需要抓取商品的ID,商品的ID在图 4.3中顶层父结点中即属性Skll的值。A. 获取商品与商品简介在4.3.1节中,京东每件商品的信息放在li中,而li中又有许多子标签,标 签

38、Q target=M_blankw-及其子标签中存放了商品的,以京东中的某一件商品为例, 其HTML结构如下:【销售冠军】圣优 新款休闲男鞋版潮流时尚板鞋驾车鞋男士英伦防滑 鞋子透气网鞋深兰42码标准运动鞋码font style二color:#ff0000 class*adwordsM id=,AD_1022922287,X/font在标签div class=Mp-nameH及其子标签中存有商品的主页和商品的简介。其在 Node树中的结构见图4.4。图4.4中第二层的结点存有商品的主页信息,第三层所有 的结点存有商品的所有简介信息。可以把第三层的所有子结点全部转换为字符串,用 来在视图层中显示

39、商品的简介。图4. 4 p-name局部结构B. 获取商品图片商品的图片信息存储在标签div class=,p-imgw的子标签img 中,以某件商品为例,其该部分的HTML结构如下:在爬取到的HTML文档中的 image标签中有一个属性名为data-lazyload的属 性,其原本应该为srcoC. 获取商品价格商品的价格信息一般存储在div class=hp-priceM 的子标签中,京东的商品价 格有时候直接显示在其HTML文本中,然而在更多情况下HTML文本中并没有价格信息, 这种情况是因为京东使用了 AJAX技术以根据商品的ID动态获取商品的价格,因此对 于京东爬取模块需要额外爬取商

40、品的ID。以某件商品为例,其HTML结构如下:2800 (然而在更多情况下此处并没有价格信息)由于在很多情况下在上述HTML文本中的标签strong class二”J_ 1024062417 ” 后边并没有商品的价格信息,此时就需要其它的方法来获取商品的价格。类 JDItemlnfoList提供了 fpdatePrice方法来获取商品的价格。京东的页面使用JS通 过get提交的方式来获取商品的价格。以某页面为例,其get提交的URL格式如下: p. 3. cn/prices/mgets?skuids=J_1022922287,J_1024062417,J_1003051849,J_103794

41、 2546,J_1013716538,J_1021340651,J_1028845284,J_1015133627,J_1142446514,J_10 30576907,J_1016888940,J_1028486310,J_1084204783,J_1084635574,J_1086756717, J_1026458375,J_109730784& J_1098459771,J_1018016043,J.1033241146,J_1012201 655,J_1023331713,J_1076685891,J_1091407098,J_1028480515,J_1038858497,J_102

42、 9117866,J 1100676577,J 1114744029,J 1097950947,&type=l在以上URL中,每个” J_”后边的数字就是商品的ID,将以上URL通过浏览器打开会在浏览器看到上述所有ID对应的商品的价格,见图4. 5。;P) Xr(*idrj_10 22022287 .1003051849,* ridxrj_10137l663rZpv rid: j_ia2BB4B28r, llJZ4465l4,pv I1016888940-fid:nJ 1084204783, p ridr/J_10867567ir/p, r id,TJ-m g 7 307848J 9 ridr

43、j.ioiBoieow.p*rid*rj_10?668689Zpv rid* 5.1020480515,v 1020117866, p fidrrj 1114744029, prC C $ CJ1024C624jr/p*ri39 10374254,*:128 102134066, 1015133627,139 1030576907*,*:*119 102B4863O*/pri29 1084635 也犷,p:L39256.OCT,378.00* /idJT*199.00h Cidx:AJ*338.a0h fidx:AJ498. 00d89.0ITh3990叭 25880trh ri: rtJJ0

44、2e4583T5599.00L Cidr:,J 590.00Lz3t6.00*h TidJT*199.00h Cidx:AJ*249. OQh fidx:AJ.00W“259OOL.00*. V00o(r, nr26900vh00笃F*558时打00笃F199皿工.oirr*24900*1, OCT 厂39900*b.00W“L98OOL256. OCT,.00%V2T9OOL.00*. qv299oo*h.00, nr00vh00笃F239M2333lT13f/ri29109H07098*pvri48】D3 说Jl29mocrr109.0(TWV148. (KT,、/128. OOA,r*1

45、09. Of曲.Ob, 7V39 Ogy g.oyc w.ocrji/*139.0宀:159. OVyV149.(W*99. 00,十:飓58. D(T打id: J 110D67657T, pT49. OOA, JT399.00, 99 OCT, I :*358. OCT打人子:J 109?950ir, p: 99 OCT, : M99. OCT图4. 5商品价格UpdatePrice方法将对如图4. 5中的长字符串进行分析,得到其中商品的价格,并 将价格存储在每件商品对应的ItemlnfoData类型对象的数据成员itemPrice中。(2)亚马逊商城商品基本信息抓取算法亚马逊相对于京东的要

46、显得更统一,而且在商品列表页中,商品、商品价格、商 品简介和商品图片都直观地显示在页面中,可以直接进行抓取,不需要绕弯子,其过 程与京东的抓取方法基本一致,不再进行赘诉。亚马逊每件商品的HTML结构见图4. 6,图中黑框部分就是商品的四大基本信息所 在的标签。对于亚马逊商品基本的爬取基本上京东模块的实现是一样的,甚至比京东模块的要更简单。pro9 )S.d_0 cLM*rraber*r1.yiY cl匕厂 p roOxt|叽/1;|10/1/応1? amisclxx boxctorsO* ale:JctnatM*rctri.tL.imMfl 5“勺施勺竝也qQEUHrdcZMonanxw?、甌

47、Umr青夏侈另士”瀚僻遮佻何另妊11*31v clAsy-nevPrioe*皿砂;X 350.ee|了存5、忑 X42.0044v cl*avkiMav*dav f規在有受r_JiP_ 9xaxgrSQ&;g)SU; 切加;L3,SS2,”皿上.4aM如.&x矽:缸(UQ“丄缸(UQR ) :ww eazcd/orgjgtrerio/BXaCSI3庁 xlnj :btt:/a-4a/fbDinci0,mr4O-a,C vLtt3F*fi5* aL: 于均4 0 A/ allyn*AftflbftfiSM* title- TJK hoiQh:= ,2 dordors O /x/aniwp;(a

48、M&f=htm:w-jft Qi/03MtrmQZ/BOaDgMI0C A2vgv“2nx“2nA、3、*VQr JailgdUaX29EfiS2Q、JK戏所有 0e 个剧斗彳、py.yQMt:/p图4.6亚马逊商品4. 2.3爬取分页相关信息当对一个商品进行搜索时,往往会匹配岀多件商品,有时候商品的数目过多需要 进行分页显示。于是本系统对分页的情况进行了处理。系统的分页功能需要靠一个类来实现:public classPageInfoDatapublic int page; public int jdpage;public int azpage;public int tbpage; publi

49、c String key;public String key_gbk;public String key_utf8;类PagelnfoData封装了 一些关键信息。page表示用户当前向系统请求的页码,当用户使用搜索时该变量的值为1或者用 户通过第2页的“上一页”请求第1页时该变量的值也为1.jdpage表示系统在一次响应用户的请求时,京东商城对于该商品的搜索结果的分 页数。azpage表示系统在一次响应用户的请求时,亚马逊商城对于该商品的搜索结果的 分页数。tbpage表示系统在一次响应用户的请求时,网对于该商品的搜索结果的分页数。 key为搜索关键字。key_gbk和key_utf8表示用

50、户向系统提交的关键字。两者的编码格式不同,第一 个为gbk编码第二个为utf-8编码。系统在一次响应用户的请求中只会实例化一个PagalnfoData的对象,该对象在系 统的整个流程的开始和结尾部分都起到重要的作用。该对象在系统中几乎是全局的, 绝大多数核心的功能类都有专门的数据成员来存储该对象的引用。在业务逻辑层、数据爬取层、视图层,都有涉及到该对象的操作,以该对象为基 础的分页机制是不可分割的,所以单独把该对象拿出来结合分页机制进行叙述,在其 它部分就不再对该对象及其相关的逻辑进行讲诉。(1) 在逻辑业务层用户访问系统的URL格式一般为:localhost : 8080/0PPCS/search. jsp?key二商 品名&page二当前页码&JD 二京东总页数 &AZ二京东总页数&TB二淘宝总页数或:localhost:8080/OPPCS / search. jsp?key二商品名对于第一种格式(方式1)是用户点击上一页”或“下一页”的邻页请求,第二 种格式(方式2)是由表单提交给系统的搜索请求。对于方式

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论