import java.util.ArrayList;
/**
* 订单类
* 包含:订单ID、订单所属用户、订单所包含的商品、订单总金额、订单应付金额
* 如果是会员,那么可以基于以上折扣继续折扣
* @author QIN
*
*/
public class Order {undefined
// 订单ID
public String ordId;
// 订单所属用户
public User user;
// 订单所包含的商品(多个商品,使用ArrayList)
public ArrayList pds;
// 订单总金额
public float ordAllAmt;
// 订单应付金额
public float payAmt;
// 计算总金额的方法
public void setAllAmt() {undefined
float sum = 0;
for(int i=0;i
sum +=this.pds.get(i).price * this.pds.get(i).number;
}
this.ordAllAmt = sum;
// 计算实付金额
public void setPayAmt() {undefined
float tmp = this.ordAllAmt;
// 根据总金额进行折扣
if(this.ordAllAmt = 1000 this.ordAllAmt
// 根据会员等级折扣
if(user.CustLevel.equals("一般会员")) {undefined
if(user.CustLevel.equals("中级会员")) {undefined
if(user.CustLevel.equals("高级会员")) {undefined
//计算结果赋值给对象上的payAmt变量
this.payAmt = tmp;
Java爬虫框架WebMagic简介及使用
第一段:介绍
第二段:概览
WebMagic项目代码分为核心和扩展两部分.核心部分(webmagic-core)是一个精简的、模块化的爬虫实现,而扩展部分则包括一些便利的、实用性的功能(例如注解模式编写爬虫等).
Downloader
PageProcessor
PageProcessor负责解析页面,抽取有用信息,以及发现新的链接.WebMagic使用Jsoup作为HTML解析工具,并基于其开发了解析XPath的工具Xsoup.在这四个组件中,PageProcessor对于每个站点每个页面都不一样,是需要使用者定制的部分.
Scheduler
Scheduler负责管理待抓取的URL,以及一些去重的工作.WebMagic默认提供了JDK的内存队列来管理URL,并用集合来进行去重.也支持使用Redis进行分布式管理.除非项目有一些特殊的分布式需求,否则无需自己定制Scheduler.
Pipeline
Pipeline负责抽取结果的处理,包括计算、持久化到文件、数据库等.WebMagic默认提供了"输出到控制台"和"保存到文件"两种结果处理方案.Pipeline定义了结果保存的方式,如果你要保存到指定数据库,则需要编写对应的Pipeline.对于一类需求一般只需编写一个Pipeline.
Request
Request是对URL地址的一层封装,一个Request对应一个URL地址.它是PageProcessor与Downloader交互的载体,也是PageProcessor控制Downloader唯一方式.
Page
ReusltItems
ReusltItems相当于一个Map,它保存PageProcessor处理的结果,供Pipeline使用.它的API与Map很类似,值得注意的是它有一个字段skip,若设置为true,则不应被Pipeline处理.
Spider是WebMagic内部流程的核心.Downloader、PageProcessor、Scheduler、Pipeline都是Spider的一个属性,这些属性是可以自由设置的,通过设置这个属性可以实现不同的功能.Spider也是WebMagic操作的入口,它封装了爬虫的创建、启动、停止、多线程等功能.
对于编写一个爬虫,PageProcessor是需要编写的部分,而Spider则是创建和控制爬虫的入口.
WebMagic项目代码包括几个部分,在根目录下以不同目录名分开.它们都是独立的Maven项目.
WebMagic主要包括两个包,这两个包经过广泛实用,已经比较成熟:
webmagic-core
webmagic-core是WebMagic核心部分,只包含爬虫基本模块和基本抽取器.
webmagic-extension
webmagic-extension是WebMagic的主要扩展模块,提供一些更方便的编写爬虫的工具.包括注解格式定义爬虫、JSON、分布式等支持.
第三段: 基本的爬虫
PageProcessor-页面分析及链接抽取
Selector是webmagic为了简化页面抽取开发的独立模块,是整个项目中我最得意的部分.这里整合了CSS Selector、XPath和正则表达式,并可以进行链式的抽取,很容易就实现强大的功能.即使你使用自己开发的爬虫工具,webmagic的Selector仍然值得一试
Jsoup
HtmlParser
Apache tika
HtmlCleaner与Xpath
这里说的页面分析主要指HTML页面的分析.页面分析可以说是垂直爬虫最复杂的一部分,在webmagic里,PageProcessor是定制爬虫的核心.通过编写一个实现PageProcessor接口的类,就可以定制一个自己的爬虫
HTML分析是一个比较复杂的工作,Java世界主要有几款比较方便的分析工具:
webmagic的Selector
Scheduler-URL管理
URL管理的问题可大可小.对于小规模的抓取,URL管理是很简单的.我们只需要将待抓取URL和已抓取URL分开保存,并进行去重即可.使用JDK内置的集合类型Set、List或者Queue都可以满足需要.如果我们要进行多线程抓取,则可以选择线程安全的容器,例如LinkedBlockingQueue以及ConcurrentHashMap.因为小规模的URL管理非常简单,很多框架都并不将其抽象为一个模块,而是直接融入到代码中.但是实际上,抽象出Scheduler模块,会使得框架的解耦程度上升一个档次,并非常容易进行横向扩展,这也是我从scrapy中学到的.
Pipeline-离线处理和持久化
首先引入WebMagic的依赖,webmagic-core-{version}.jar和webmagic-extension-{version}.jar.在项目中添加这两个包的依赖,即可使用WebMagic.
maven中引入依赖jar包
dependency
groupIdus.codecraft/groupId
artifactIdwebmagic-core/artifactId
/dependency
artifactIdwebmagic-extension/artifactId