




已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编号: 毕业设计说明书题 目: 在线产品即时比价系统 学院: 计算机科学与工程学院 专 业: 计算机科学与技术 学生姓名: 张水荣 学 号: 1001110730 指导教师单位: 计算机科学与工程学院 姓 名: 张敬伟 职 称: 讲 师 题目类型:理论研究 实验研究 工程设计 工程技术研究 软件开发 2014年5月 31日摘 要近些年来电子商务行业获得了飞速的发展,电子商务改变了人们的购物习惯,越来越多的人倾向于在网上购买商品。然而,用户如何在众多的电子商务网站中找到性价比最高的商品?为了解决以上问题,即时比价系统就诞生了,即时比价系统通过收录各大电商网站的商品信息,实现了即时比价的功能。用户可以通过比价系统实时获得各大电商网站中的产品价格信息,而不用在多个电商的门户网站上来回切换,同时比价网站也提供给了用户平时不会关注的冷门电商网站的商品信息。本系统的功能是为用户爬取各大电商网站的商品信息,并将这些数据同步呈现给用户。本系统分为3个层次:业务逻辑层、数据爬取层、视图层。数据爬取层是整个个系统的核心,使用Jsoup文本解析库来对HTML文本进行解析,以获取其中的商品信息,再将获得的商品信息以对象的形式保存到一个列表中。业务逻辑层是系统中的难点,其中使用了字符串相似度计算算法来取得两个名称相似或相同的商品,才能更好地实现对商品价格的对比功能。本系统非常具有实用性,也有高度的可拓展性,可以很便捷地增加数据源。关键词:电子商务;比价系统;数据爬取 AbstractRecent years, with the rapid development, peoples shopping habits have a big change, and online shopping are being practiced by more and more web users. However, how can the users find the high performance-price ratio goods from so many e-commerce sites?In order to solve this problem, price-comparisons was born. Price-comparisons in order to compare prices form different e-commerce sites immediately, it records the product form different e-commerce sites. Users can find the price of goods from more than one site in the price-comparisons, rather than in a number of websites switch back and forth. At the same time price-comparisons also provide the users information of goods from websites that are unpopular.The function of the system is to crawl the information of goods from websites for users, and synchronize the data presented to the user. The system is divided into three layers: the business logic layer, data layer crawling and view layer. Data crawling layer is the core of the system, and using Jsoup text parsing library for parsing HTML text in order to obtain the information of commodities, and saving the information as a Object into a List. The business logic layer is the difficulty of the system. To get the similarity or same product and implement the price compared function, the system uses the String similarity calculation algorithm.The system is very practical, and has a high expansibility. Its very convenient to add a data source.Key words:e-commerce; price-comparisons; data-crawling目 录1绪言11.1课题背景11.2课题研究的意义11.2.1课题的现实意义11.2.2课题的学习意义11.3国内外概况11.3.1比价系统国内外发展概况11.3.2HTML解析国内外发展概况21.4课题主要内容31.4.1课题任务31.4.2毕设主要内容32系统设计方案42.1两种系统设计方案42.1.1方案1 数据库法42.1.2方案2 即时爬取法52.2方案选择62.3开发技术与开发环境62.3.1JSP技术62.3.2HTML解析技术Jsoup介绍72.3.3系统开发环境73系统总体设计83.1系统总体架构83.2每层简要设计94系统详细设计与实现114.1系统功能简介114.2数据爬取层设计与实现114.2.1爬取商品列表114.2.2爬取商品基本信息134.2.3爬取分页相关信息194.3业务逻辑层和视图层设计与实现214.3.1业务逻辑层214.3.2视图层214.4系统性能与结果分析244.4.1系统设计对性能的影响分析244.4.2并发访问性能分析255总结与展望255.1总结255.2展望26致谢27参考文献28附 录291 绪言1.1 课题背景近几年来电子商务行业进入了迅速发展的时期,国内不断有公司涉入电子商务行业。以淘宝为代表的电子商务网站发展迅速,这些电商网站改变了人们的购物习惯。这些电商网站给用户带来了便捷的购物体验,人们越来越倾向于到电子商城购买自己想要的商品。但是,现在流行的购物网站大多数都是以销售自己网站的产品为主的、专有型购物网站(如淘宝网),而缺乏与其他购物网站对比来显示自己网站优势的功能。这样的网站有很多的局限性。网站的知名度会影响网站的访问量,例如知名度低的网站,用户有可能不会去访问,或者根本就不知道这些网站的存在,这就会使这些购物网站上店家的商品资源得不到有效的利用。在此背景下,比价服务应运而生。比价网站能够很好地应对上文中提到的问题。1.2 课题研究的意义1.2.1 课题的现实意义当用户需要购买一件商品时他需要面临一个选择,即在哪个网站购买自己想要的商品,在这个时候用户会在各大电商网站中逐一搜索自己想要购买的商品,哪个网站提供的商品性价比最高,用户就会选择这个网站进行交易。用户在各大网站搜索和比较商品无疑是一件费时费力的事情,频繁得在各大电商网站之间切换,不能很直观的看到这些商品之间的差异。此外,用户多会在一些较大的电商网站比如淘宝、京东等搜索自己想要购买的商品,却忽略了其它规模较小的电商网站,用户在不知不觉间就丢失了一些重要的信息。为了应对以上问题,开发一个比价系统是很有必要的。当用户需要购买一件商品时,只需要在比价网站搜索自己想要的商品,比价网站会将各大电商网站的商品信息在同一个页面呈现给用户,用户可以直观的看到各大电商网站的商品价格差异,同时也能获取其它不知名购物网站的商品信息,有助于用户完成交易。比价系统对于用户和卖家都是有利的,非常有价值去实现这么一个具有比价功能的系统。1.2.2 课题的学习意义Web系统开发在当前是一个非常热门的领域,越来越多的程序员都在涌向Web开发领域。因此,熟悉一些Web开发中常用的技术是非常有意义的事情。Java、PHP和.net是当今Web开发中最常用的技术。本系统将采用Java来开发,同时了解Java开发Web系统的流程,熟悉Java开发的一些常用技术,对自己以后的发展是很有帮助的,因此开发一个这样的基于Web的网络购物比价系统能够提高自己的竞争力,也可以为将来从事此行业铺好道路。1.3 国内外概况1.3.1 比价系统国内外发展概况互联网技术的出现和发展极大方便了人们对信息的获取,国外互联网出现的较早,对价格比较系统的研究和开发也比较早。目前国外的比较购物行业已经处于较为成熟的阶段。比较购物已经成为国外网购用户必须借助的网购工具,也成为B2C 商家不可或缺的合作伙伴。国内比较购物网站起步的比较晚,一直到2004 年,随着互联网的普及,比较购物网站才开始兴起,但是发展到现在,国内也已经出现了不少的比较购物网站和应用。1.3.2 HTML解析国内外发展概况比价系统的核心在于HTML文本的解析,当前用以HTML解析的工具非常多,这些工具由各种语言开发,很多工具都有多语言版本。国内外可用以HTML解析的库相当多,主要如下:HTML Parser 。该库是一个对HTML进行分析的快速实时的解析器,最新的发行版本是2.0。Jsoup。Jsoup 是一款 Java 的HTML 解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于JQuery的操作方法来取出和操作数据。jsoup的主要功能如下:从一个URL,文件或字符串中解析HTML;使用DOM或CSS选择器来查找、取出数据;可操作HTML元素、属性、文本;jsoup是基于MIT协议发布的,可放心使用于商业项目。NekoHTML。NekoHTML是一个Java语言的 HTML扫描器和标签补全器(tag balancer) ,使得程序能解析HTML文档并用标准的XML接口来访问其中的信息。这个解析器能够扫描HTML文件并“修正”许多作者(人或机器)在编写HTML文档 过程中常犯的错误。NekoHTML能增补缺失的父元素、自动用结束标签关闭相应的元素,以及不匹配的内嵌元素标签。NekoHTML的开发使用了 Xerces Native Interface (XNI),后者是Xerces2的实现基础。JTidy。JTidy 是 HTML Tidy 用Java语言实现的版本,提供了一个HTML的语法检查器和很好的打印功能。JTidy可以用来清除格式不好和不对的 HTML。此外,JTidy提供了对整个HTML的DOM分析器。程序员可以将JTidy当作一个处理HTML文件的DOM解析器来使用。HTMLCleaner。HTMLCleaner是一个开源的Java语言的HTML文档解析器。HTMLCleaner能够重新整理HTML文档的每个元素并生成结构良好(Well-Formed)的 HTML 文档。默认它遵循的规则是类似于大部份web浏览器为创文档对象模型所使用的规则。然而,用户可以提供自定义tag和规则组来进行过滤和匹配。MozillaParser。MozillaParser 是一个 Java 的HTML 解析类库,基于 mozilla 的HTML 解析器,提供了Java类到 Mozilla类的一个桥接,输入一个HTML文本,输出一个 Java 的 Document 对象。Jerry 。Jerry是 Jodd 工具包中的一个HTML解析工具。它有点像是用Java实现的jQuery。Jerry是一个高效简洁的Java库,用来简化HTML的解析,遍历和操作。Jerry的API在设计的时候完全向jQuery靠拢,几乎和jQuery一样,所以有时候你可以直接copy jQuery的代码来用。当然,也有些代码做不到一样,毕竟执行的环境差了很多。Jerry是一个静态的HTML解析工具,所以jQuery的动态功能Jerry是没有的,例如Ajax,动画等等。Scrender。Scrender是一个用来生成网页缩略图的Java类库,基于SWT开发。它实质上是调用本地浏览器引擎对要进行截图的网站进行渲染,然后保存该网页的缩略图。在本系统中采用Jsoup来进行HTML文本解析,灵活、高效地使用Jsoup也是整个系统的关键所在。1.4 课题主要内容1.4.1 课题任务本课题将实现一个简单的网络购物比价系统,系统需达到如下要求:本系统主要是对在淘宝网、京东网和亚马逊网三大购物网站中的相同产品的信息进行抽取。本系统的重点是实现使用HTML页面爬取功能获取产品数据,对获取到的网页数据进行抽取分析,最后以Web页面形式呈现出来。本系统的难点是使用HTML页面爬取功能获取产品数据,对获取到的网页数据进行抽取分析,结构化抽取的数据和信息。1.4.2 毕设主要内容毕设根据课题任务实现了一个实时爬取淘宝网、京东网和亚马逊网的商品信息的比价系统。系统具有如下特点:(1) 系统能够分别从淘宝、京东和亚马逊三个网站爬取相关商品信息,商品的信息包括商品链接、商品图片链接、商品价格、商品名(也指商品简介)。系统可以在同一个页面中同时显示三大电商网站的相关商品信息,用户可以从页面中看到不同电商网站的商品价格差异;(2) 商品的关键字匹配是在电商网站完成,电商网站的搜索结果是比较准确的,系统将搜索结果直接拿来使用,保证了商品关键字的较高匹配度;(3) 系统设计为实时爬取。系统的这个特性保证了系统爬取到的信息的准确度,能够很好应对两大电商网站的价格浮动和商品的新旧更替;(4) 系统的默认排序为三个电商网站商品的交替排序,并且这些排序是经过相似度算法处理的;(5) 系统可以选择不同的电商(这里只做了三个)的商品;(6) 系统没有较明显的大BUG,不影响用户的使用体验;(7) 系统主要分为3个层级:业务逻辑层、数据爬取层、视图层。三个层级协调工作,共同实现整个系统的功能。2 系统设计方案2.1 两种系统设计方案比价系统要做的事情主要是:爬取多个电商网站的商品信息,将这些商品的信息同时呈现给用户。然而商品数目繁多,系统需要在众多的商品中搜索出符合用户要求的商品。关于在何时何地进行商品的搜索产生了2种不同的方案 - 数据库法和即时爬取法。数据库法需要经常更新数据库数据,而即时爬取法则更适合本系统的设计目的。在2.1.1和2.1.2小节将会详述2种方案的细节,以及两种方案的优缺点。2.1.1 方案1 数据库法在该方案中,系统已经事先爬取了各大电商网站几乎所有的商品信息,然后将每种商品的主要信息(商品价格、商品主页链接、商品图片链接、商品简介)存储在服务器的数据库当中,并将每种商品在数据库的索引和其关键字信息通过检索/索引工具(比如:Lucene)在磁盘建立索引文件。当用户在比价系统的搜索栏中输入关键字并点击搜索按钮时,系统获取了这一关键字,然后通过检索/索引工具的检索功能获取一系列符合要求的商品的索引,然后将这些商品的信息从数据库取出,通过jsp技术动态生成网页提交给用户的客户端浏览器。方案1的系统流程见图2.1。(1) 方案优点爬取模块和响应客户端的模块相对较独立,爬取模块可在空闲时爬取商品信息。商品检索在服务器端执行,响应速度较快。(2) 方案缺点每个电商网站的商品数量都是非常大的,再加上多个电商网站,总的商品量就相当大,然而电商网站的数据库不可能开放给外界直接进行访问,系统需要通过电商网站的商品页面来获取商品信息。假设每个商品都对应一个页面,那么就是海量的数据要进行处理。每爬取一次都要耗费大量的资源,带来一定的开销,然而这些商品的数据并不是一成不变的,需要经常更新来确保数据的准确性。客户端浏览器视图层数据库数据爬取模块业务逻辑层数据持久化亚马逊商城京东商城图2.1 方案1数据库法2.1.2 方案2 即时爬取法方案1的实现类似于搜索引擎,方案2则与方案1大不相同。方案2中商品的信息并不存储在系统服务器端的数据库中。当用户提交关键字时,服务器端将关键字提交给各大电商网站,然后将各大电商网站的搜索结果页中爬取商品信息,将爬取到的信息经过处理再动态生成网页提交给用户。方案2的系统流程见图2.2.(1) 方案优点较灵活,可良好应对商品信息经常变更的情况。在服务器不需要数据库来存储数据,消除了数据的维护成本。(2) 方案缺点用户在客户端每提交一次关键字服务器就要在各大电商网站再提交一次关键字,然后实时爬取商品信息再反馈给用户的客户端浏览器,需要花费时间等待系统把产品页面数据下载下来,而且每次面向用户服务都要对各大电商网站商品页面信息页面进行解析,耗时耗资源,特别是在数据源很多的情况下。客户端浏览器比价系统业务逻辑层视图层数据爬取层京东商城亚马逊商城图2.2 方案2 即时爬取法2.2 方案选择最终实现方案:方案2 即时爬取法。在方案1(见图2.1)当中,一次性抓取所有电商网站的所有信息要耗费大量的时间,而且在此期间对于大量网页的解析需要进行大量的运算,在此抓取周期内还可能发生各种不可预知的因素,而且整个抓取模块还受限于PC机的性能和网络环境等因素,综合以上因素方案1并不适合作为毕业设计的最终方案。而方案2较容易实现,虽然用户每次访问都要做较大量的运算,并行服务性能定然不强,但并不用事先抓取海量的商品信息,相对于方案1较容易实现。综合以上分析的情况,选定方案2作为系统的最终实现方案。2.3 开发技术与开发环境2.3.1 JSP技术Web领域开发技术众多,像.NET、JSP、PHP等。本系统主要使用JSP技术来实现。JSP是由SUN公司倡导、其它公司参与一起建立的一种动态技术标准。在传统的网页HTML文件中加入JAVA程序片段和JSP标签,就构成了JSP网页。JAVA程序片段可以操作数据库、重新定向网页等,实现建立动态网站所需的功能,所有程序操作都在服务器端执行,并将动态建立的HTML网页发送给客户端浏览器。而浏览器与开发技术无关,浏览器只负责解析渲染HTML页面。JSP技术优势。由于JAVA跨平台的特性,可以一次编写处处运行。代码在跨平台时不用做大量的修改。JAVA具有强大的可伸缩性,由多台服务器进行集群和负载均衡再到多态Application进行事务处理,消息处理,一台服务器到无数台服务器,JAVA显示了一个巨大的生命力。JAVA还有功能强大的和多样化的开发工具支持。很多开发工具免费提供给开发者和学习者。此外JAVA还有很多服务器端组件的支持JSP技术劣势。JAVA的跨平台特性源于其特殊的运行方式。JAVA编译成字节码后要在JVM中运行。这样大大降低了执行效率。同时JAVA庞大繁多的框架与组件支持也加大了其系统的复杂性以及学习者的压力。2.3.2 HTML解析技术Jsoup介绍系统使用HTML解析库Jsoup来对网页进行解析。jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。jsoup的主要功能如下:(1) 从一个URL,文件或字符串中解析HTML;(2) 使用DOM或CSS选择器来查找、取出数据;(3) 可操作HTML元素、属性、文本;jsoup是基于MIT协议发布的,可放心使用于商业项目。jsoup 的主要类层次结构如下图所示:图 2.3 Jsoup类层次结构图2.3.3 系统开发环境JAVA是一个跨平台的语言,相应的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整合、代码审查、 创新的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 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。目前最新版本是8.0,而本系统采用的是版本Tomcat 6.0。3 系统总体设计3.1 系统总体架构系统采用JAVA EE技术开发。系统主要分为3个层次:业务逻辑模层、数据爬取层块、视图层。该系统虽不是严格的MVC模式,却与MVC模式具有很大的相似性。业务逻辑层。该层负责将浏览器提交的参数进行简单的处理,通过相关逻辑功能,分别生成三大电商网站的URL,将URL作为参数提交给数据爬取层。该层相当于MVC里面的C。数据爬取层。数据爬取层以业务逻辑层提交的URL作为参数,对该URL对应的商品页面进行解析,获取页面的商品列表,针对商品列表中的每一件商品逐个解析,最后把爬取到的商品数据封装在对象数组中,返回给业务逻辑层。该层相当于MVC里面的M。视图层。视图层是直接面向用户的一个层,该层包含了一个静态的HTML页面和一个动态的JSP页面。静态的HTML页面是系统的主页,主要负责向系统提交用户的搜索关键字。动态页面主要用来显示搜索的结果,同时也提供同静态HTML页面相同的功能。系统总体架构图如图3.1所示。视图层业务逻辑层数据爬取层发送搜索关键字与分页信息请求发送url请求返回爬取到的数据返回处理过的数据图 3.1 系统总体架构图3.2 每层简要设计接口是软件开发领域内的一个重要的概念。接口可以用来定义软件体系中不同层次之间的通信规则。在软件开发的过程中,开发者将系统分为多个层次,每个层次实现特定的功能,并为各个层次之间的通信建立接口标准,这样只要每个层次的满足了接口标准,在某一层需要改动的时候其它层不需要进行改变。接口屏蔽了每一层的实现细节,同时保证了程序模块的重用性。本系统分为三个层次:业务逻辑层、数据爬取层、视图层。业务逻辑层根据用户的请求生成三大电商网站的URL,将URL提交给数据爬取层;同时业务逻辑层还将数据爬取层返回的商品数据进行简单的处理,将其返回给视图层。数据爬取层根据业务逻辑层提交的URL爬取该页面的商品数据,将数据封装在对象数组中并返回给业务逻辑层。视图层根据业务逻辑层返回的商品数据,动态生成HTML页面,将其提交给用户端的浏览器。业务逻辑层。在该层创建时,其构造方法需要以request对象作为参数,该层可以根据request对象获取用户的请求。在该层消亡时,该层需要返回商品数据给调用层,因此该层需要有一个方法用来获取商品信息并将其返回。可以对该层进行如下框架设计:(1) 类:GetItemFromWeb,该类为该层的功能实现类。(2) 方法:GetItemFromWeb ( HttpServletRequest request ),该方法为构造方法,创建对象时以request对象作为参数,该类可以通过request对象来获取用户的请求信息。(3) 方法:public List getItemInfoList (),该方法用以获取通过请求获得的商品项信息列表结果集。数据爬取层。该层以页面URL作为参数获取该页面的商品信息。在该层创建时,该层需要获取页面的URL,其构造方法需要以URL作为参数。在该层消亡时,该层需要将爬取到的商品数据返回给调用层。可以对该层进行如下框架设计:(1) 接口ItemInfoListInterface,该接口用于规范获取商品项信息列表的类。(2) 方法 public List getItemInfoList (),该方法爬取URL对应的页面的商品信息,并将其作为返回值返回。视图层。该层可以用两个页面实现。使用静态的HTML网页做系统的主页,该页面的搜索框模仿一淘网的主页搜索框样式。动态的页面使用的是JSP技术实现,该页面负责显示商品的信息,该页面模仿了京东加一淘的搜索结果页的布局。浏览器业务逻辑层数据爬取层视图层电商网站请求request对象URLURLHTML文本商品数据商品数据HTML文本系统的数据流向图见图3.2 。图3.2 系统数据流向图4 系统详细设计与实现4.1 系统功能简介本系统只对淘宝网、京东网和亚马逊网3个购物网站的商品信息进行爬取。系统可以根据用户提交的关键字在淘宝网、京东网和亚马逊网抓取相关商品信息,并将抓取到的信息通过JSP技术动态生成网页提交给浏览器。用户可以在搜索结果页中看到来自三大电商网站的商品,可以直观地察觉到两大商城的商品价格差异,并不用分别从两大电商的网站搜索商品,这样节省了用户的时间和精力。在上文中介绍到系统主要由三层构成,下文将详细介绍这三个功能层的设计与实现。4.2 数据爬取层设计与实现数据爬取层的功能:以页面的URL作为参数获取该页面的商品信息,并将商品信息封装在对象数组中。本小节将着重于介绍系统如何从页面的URL获取每件商品的各项基本信息。4.2.1 爬取商品列表(1) 京东商品列表爬取算法的设计与实现京东搜索得到商品的搜索结果页面见图4.1。在图4.1中,红色方框中的商品才是系统需要爬取的商品。数据爬取层需要将搜索到的结果从大量的商品中分离出来,得到一个列表,然后再对列表中的商品逐一解析。本小节将详细介绍系统如何获取这个列表。图4.1 京东商品搜索结果页面在搜索结果中,京东的的图书和非图书的搜索结果页面结构是不同的,图书和非图书商品在搜索结果页面中的HTML代码对比如下:图书商品1非图书商品1图书商品2非图书商品2图书商品3非图书商品3图书商品N非图书商品N标签中存放搜索得到的所有商品。获取商品的列表就是将标签中的所有子标签对应的Node结点过滤出来。系统中实现获取搜索结果页面商品列表算法的为类JDItemInfoList的GetItemInfoList方法,类JDItemInfoList同时也是实现数据爬取层的顶层类,该类的成员及简介见表4.1.表4.1 类JDItemInfoList成员简介PageInfoData pagedata存储用户请求的页面信息对象pageurl当前需要解析的页面URLpublic JDItemInfoList ( PageInfoData pagedata1,String url)构造方法private List getItemInfoList ( )通过页面URL获取商品列表getItemInfoList方法可以采取两种方法来获取商品搜索结果的列表。其中一种方法对图书和非图书的HTML结构敏感,另外一种方法对两者的HTML结构不敏感。下文将详细介绍这两种方法。1 方法1:对两者的HTML结构不敏感方法1是一种对于两种商品的HTML结构不敏感的方法。图书商品和非图书商品都存放在标签中,系统可以过滤出该标签对应的节点标签对象,并执行该对象的getChildren方法即可获取商品的列表。方法1的优点:简洁、高效、出错机率小。方法1的缺点: getChildren方法获取的列表中会存在大量的空结点,在下一小层对列表中的商品进行解析时会花费额外的开销去处理这些空结点。2 方法2:对两者的HTML结构敏感方法2对于两种商品的HTML结构敏感,该方法直接从整棵树中过滤出商品的结点并得到一个列表。然而系统预先并不知晓该页面是图书商品页还是非图书商品页,系统需要同时用两种过滤规则过滤出商品的结点列表。(2) 亚马逊商品列表爬取算法设计与实现针对亚马逊网站的页面商品列表提取算法与京东的基本一样。亚马逊对所有商品的搜索结果页中商品局部HTML结构都是一样的,比京东的更简单。亚马逊搜索结果页的商品信息放在 中,每件商品的信息放在中,可以依据上诉规律来设定过滤条件。亚马逊的搜索结果页面结构较统一,并不需要像京东那样需要采用多线程技术针对两种页面进行爬取,除此之外其它的流程和京东模块基本一致,不再赘诉。4.2.2 爬取商品基本信息商品的基本信息包括:商品链接、商品图片链接、商品价格、商品简介。这些信息全部用字符串来表示,在java中用String来表示。系统用一个类ItemInfoData来存储单件商品的基本信息。该类有5个数据成员,其定义如下:public class ItemInfoData public String itemUrl;public String itemIntro;public String itemImage;public String itemPrice;public String jdid;其中itemUrl是商品的链接,itemIntro是商品的简介,ItemImage是商品的图片链接,itemPrice是商品的价格。系统中所有的商品都需要抓取前4个信息,并且每件商品的信息都存储在ItemInfoData类型的对象中。对于京东还需要抓取商品的ID存储在jdid中。(1) 京东商城商品基本信息抓取算法在京东的搜索栏中提交关键字后,京东根据关键字搜索到符合要求的商品,并将商品按符合度排序。京东在每一页面最多显示36件商品。在上文中讲到,每件商品的信息都放在标签中的每一个标签中。标签中的结构如下:1 2 3 4 5 6 7 8 9 10 诺基亚(NOKIA)商品简介及关键词11 12 13 14 15 16 17 商品的HTML文本中第1行为该商品的ID号,第4行的标签中存放了商品的图片链接,第9行的标签中存放了商品的主页链接,第10行是商品的简介。类JDItemInfoList用来从商品列表爬取商品的基本信息,其核心方法为getItemInfoList。类JDItemInfoGet各成员简介见表4.3。表4.3 类JDItemInfoList方法简介PageInfoData pagedata存储当前搜索分页信息public JDItemInfoList (PageInfoData pagedata)构造方法public List getItemInfoList()解析商品列表中的每件商品得到其基本信息private void UpdatePrice(List itemlist)当爬取商品价格失败时调用此方法重新爬取商品价格private JSONArray getPriceJSONArray(String url)爬取商品价格信息,返回JSONArray对象HTML文本中的每个Node结点都存在于一棵Node书中。京东的每件商品在Node树中的局部结构见图4.3。类JDItemInfoGet中有一个私有的方法OneItemInfoGet用来获取单件商品的基本信息。GetArrayFromList方法中会调用该方法来对每件商品进行解析。下文将从4个方面对OneItemInfoGet获取商品基本信息的详细实现进行讲诉。. 结点:div sku=”ID” 结点:div class=p-img 结点:div class=p-name 结点:div class=p-price 图4.3 单件商品在Node树中的结构对于京东的抓取模块在抓取商品基本信息前需要抓取商品的ID,商品的ID在图4.3中顶层父结点中即属性sku的值。A. 获取商品链接与商品简介在4.3.1节中,京东每件商品的信息放在中,而中又有许多子标签,标签及其子标签中存放了商品的链接,以京东中的某一件商品为例,其HTML结构如下:【销售冠军】圣优 新款休闲男鞋韩版潮流时尚板鞋驾车鞋男士英伦防滑鞋子透气网鞋 深兰 42码标准运动鞋码在标签及其子标签中存有商品的主页链接和商品的简介。其在Node树中的结构见图4.4。图4.4中第二层的结点存有商品的主页链接信息,第三层所有的结点存有商品的所有简介信息。可以把第三层的所有子结点全部转换为字符串,用来在视图层中显示商品的简介。结点:a target=结点:div class=p-namea标签中的文本:【销售冠军】图4.4 p-name局部结构B. 获取商品图片链接商品的图片链接信息存储在标签的子标签中,以某件商品为例,其该部分的HTML结构如下:在爬取到的HTML文档中的标签中有一个属性名为data-lazyload的属性,其原本应该为src。C. 获取商品价格商品的价格信息一般存储在的子标签中,京东的商品价格有时候直接显示在其HTML文本中,然而在更多情况下HTML文本中并没有价格信息,这种情况是因为京东使用了AJAX技术以根据商品的ID动态获取商品的价格,因此对于京东爬取模块需要额外爬取商品的ID。以某件商品为例,其HTML结构如下:¥28.00(然而在更多情况下此处并没有价格信息)由于在很多情况下在上述HTML文本中的标签后边并没有商品的价格信息,此时就需要其它的方法来获取商品的价格。类JDItemInfoList提供了UpdatePrice方法来获取商品的价格。京东的页面使用JS通过get提交的方式来获取商品的价格。以某页面为例,其get提交的URL格式如下:/prices/mgets?skuids=J_1022922287,J_1024062417,J_1003051849,J_1037942546,J_1013716538,J_1021340651,J_1028845284,J_1015133627,J_1142446514,J_1030576907,J_1016888940,J_1028486310,J_1084204783,J_1084635574,J_1086756717,J_1026458375,J_1097307848,J_1098459771,J_1018016043,J_1033241146,J_1012201655,J_1023331713,J_1076685891,J_1091407098,J_1028480515,J_1038858497,J_1029117866,J_1100676577,J_1114744029,J_1097950947,&type=1在以上URL中,每个”J_”后边的数字就是商品的ID,将以上URL通过浏览器打开会在浏览器看到上述所有ID对应的商品的价格,见图4.5。图4.5 商品价格UpdatePrice方法将对如图4.5中的长字符串进行分析,得到其中商品的价格,并将价格存储在每件商品对应的ItemInfoData类型对象的数据成员itemPrice中。(2) 亚马逊商城商品基本信息抓取算法亚马逊网站相对于京东的网站要显得更统一,而且在商品列表页中,商品链接、商品价格、商品简介和商品图片都直观地显示在页面中,可以直接进行抓取,不需要绕弯子,其过程与京东的抓取方法基本一致,不再进行赘诉。亚马逊每件商品的HTML结构见图4.6,图中黑框部分就是商品的四大基本信息所在的标签。对于亚马逊商品基本的爬取基本上京东模块的实现是一样的,甚至比京东模块的要更简单。图4.6 亚马逊商品4.2.3 爬取分页相关信息当对一个商品进行搜索时,往往会匹配出多件商品,有时候商品的数目过多需要进行分页显示。于是本系统对分页的情况进行了处理。系统的分页功能需要靠一个类来实现:public class PageInfoData public int page; public int jdpage; public int azpage;public int tbpage;public String key; public String key_gb
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 练习册高中数学试卷
- 清新一中期中数学试卷
- 竞赛项目效率改进策略分析报告
- 纤维酸碱性能评估报告
- 南外一模数学试卷
- 难到爆炸高一数学试卷
- 浦东高一联考数学试卷
- 墨汁应用性能评估报告
- 庐江汤池中学数学试卷
- 图书租赁环保成本控制分析报告
- 信息技术在课堂教学中的应用
- 江苏省宿迁市沭阳县如东实验学校2024-2025学年七年级下学期期末数学试卷(含答案)
- 2025年湖南省高考真题卷政治和答案
- 聚焦2025年医药企业研发外包(CRO)模式的知识产权保护报告
- 2024年河北省孟村回族自治县事业单位公开招聘工作人员考试题含答案
- 额叶胶质瘤护理查房
- 农行招聘薪酬管理办法
- 2025至2030中国膜行业产业运行态势及投资规划深度研究报告
- 2025至2030中国物流园区行业产业运行态势及投资规划深度研究报告
- 2026年高考生物一轮复习:必背高频考点讲义(全)
- 2025年成人高考语文试题及答案
评论
0/150
提交评论