淘宝决策搜索引擎
发布时间:2024-11-06
发布时间:2024-11-06
淘宝 决策 搜索引擎
《淘宝网》决策搜索引擎
在《淘宝网》购物时,顾客最关心的就是这两个页面,因此这两个页面的信息对于顾客至关重要,这也是我的搜索引擎信息收集的地方。由于有成千上万的这样格式的页面,所以我的目标就是设计出一个爬虫引擎在《淘宝网》上不断地爬,以零下载为条件,直接将目标信息数据导入我创建的数据库中,再进行搜索。
图1 商品货物信息页面
图2 卖家信息页面
淘宝 决策 搜索引擎
图3 商品信息页面Html源码的关键地方
综合分析这两个典型页面,我们可以得到这样的信息:大部分《淘宝网》的商品和店家信息都是依据这两个页面的格式形式存在的。所以依次便可以写出程序推断出整个《淘宝网》的数据。
主键ID当前价格现在购买价格网页标题
商品照片相对地址商品发货地商家昵称卖家淘宝网ID卖家在本数据库ID淘宝网Url地址本商品付款方式谁承担运费库存数量
是否支持安全付款
图4 商品信息表字段
淘宝 决策 搜索引擎
主键ID卖家淘宝网ID卖家昵称开店时间卖家积累信用买家积累信用虚拟商品交易率实体商品交易率卖家好评率买家好评率淘宝网Url地址
图5 卖家信息表字段
图6 数据库表关系图
我在网上详细查阅了有关爬虫引擎的资料和仔细挑选了开源框架后。决定使用以下几个框架作为我的爬虫引擎的主要框架。 1. Html Parser
这个开源框架主要用于解析Html格式的页面,这个框架的目的就是从当前页面将关键数据提取出来,从而在零下载的情况下得到数据。由于这个框架时间比较早,未免有些比较陈旧的做法,比如NodeList类没有实现Iterator接口,没有利用泛型等。以后的项目中可以替换为较新较成熟的框架。 2. Apache Commons Chain
在网页提取过程中,每个不同页面到底该用哪个类来负责解析呢?仔细分析后,我个人觉得使用【设计模式】中的责任链模式可以极大地降低代码耦合性,达到【软件工程】中开闭原则的效果。减少if else繁琐的判断,使代码更清晰。
淘宝 决策 搜索引擎
3. iBatis
我经过对比,选择了iBatis作为DAO层的数据存储框架,由于其可以灵活的配置SQL语句,以及轻量级设计,可以让我使用一些数据库存储过程等维持外键的约束。
4. Apache Commons Beanutils
这个框架的BeanMap是一个很好的东西,它采用了一个反射的做法给我提供了一个可以将Map属性键值对转化为bean类的方法,利用这个类可以使页面提取出的Map中包含的数据用一个统一的方法转化为实体类,再存入数据库。
图7 爬虫引擎程序流程图
淘宝 决策 搜索引擎
最终,得到了大量的《淘宝网》的商品和商家的数据库表中的数据,由于这个爬虫引擎利用“责任链模式”解析数据,可以灵活地扩展到其他不同结构的网页中去提取数据,在此基础上再实现搜索。(很抱歉,由于我下班后业余时间之作,时间仓促,全文搜索这部分未完成,考虑计划使用Apache Lucene开源框架做智能全文搜索框架)
图8 成果展示:商品信息数据库表
图9成果展示:卖家信息数据库表