package cn.test.logan.day04;
創(chuàng)新互聯(lián)公司專注于企業(yè)營(yíng)銷(xiāo)型網(wǎng)站、網(wǎng)站重做改版、荔城網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5網(wǎng)站設(shè)計(jì)、購(gòu)物商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為荔城等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。
import java.util.ArrayList;
/**
* 訂單類(lèi)
* 包含:訂單ID、訂單所屬用戶、訂單所包含的商品、訂單總金額、訂單應(yīng)付金額
* 500-1000 ------- 8.5折
* 1000-1500 ------- 8折
* 1500-2000 ------- 7折
* 2000以上 ------- 6.5折
* 如果是會(huì)員,那么可以基于以上折扣繼續(xù)折扣
* 一般會(huì)員:9.5折
* 中級(jí)會(huì)員:9折
* 高級(jí)會(huì)員:8折
* @author QIN
*
*/
public class Order {undefined
// 訂單ID
public String ordId;
// 訂單所屬用戶
public User user;
// 訂單所包含的商品(多個(gè)商品,使用ArrayList)
public ArrayList pds;
// 訂單總金額
public float ordAllAmt;
// 訂單應(yīng)付金額
public float payAmt;
// 計(jì)算總金額的方法
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;
}
// 計(jì)算實(shí)付金額
public void setPayAmt() {undefined
float tmp = this.ordAllAmt;
// 根據(jù)總金額進(jìn)行折扣
if(this.ordAllAmt = 500 this.ordAllAmt
tmp = this.ordAllAmt * 0.85f;
}
if(this.ordAllAmt = 1000 this.ordAllAmt
tmp = this.ordAllAmt * 0.8f;
}
if(this.ordAllAmt = 1500 this.ordAllAmt
tmp = this.ordAllAmt * 0.7f;
}
if(this.ordAllAmt = 2000) {undefined
tmp = this.ordAllAmt * 0.65f;
}
// 根據(jù)會(huì)員等級(jí)折扣
if(user.CustLevel.equals("一般會(huì)員")) {undefined
tmp = tmp * 0.95f;
}
if(user.CustLevel.equals("中級(jí)會(huì)員")) {undefined
tmp = tmp * 0.9f;
}
if(user.CustLevel.equals("高級(jí)會(huì)員")) {undefined
tmp = tmp * 0.8f;
}
//計(jì)算結(jié)果賦值給對(duì)象上的payAmt變量
this.payAmt = tmp;
}
}
參考資料來(lái)源:百度貼吧CSDN博主「公子京」
綁定一個(gè)事件到被點(diǎn)擊的窗體或控件,點(diǎn)擊后獲取控件信息,然后傳參給一個(gè)自定義的窗體類(lèi)的構(gòu)造函數(shù),如A = new oneDialog(參數(shù)1,參數(shù)2....);然后A.setVisible(true)。大概就是這個(gè)樣子,有不懂得可以繼續(xù)問(wèn)
Java爬蟲(chóng)框架WebMagic簡(jiǎn)介及使用
一、介紹
webmagic的是一個(gè)無(wú)須配置、便于二次開(kāi)發(fā)的爬蟲(chóng)框架,它提供簡(jiǎn)單靈活的API,只需少量代碼即可實(shí)現(xiàn)一個(gè)爬蟲(chóng)。webmagic采用完全模塊化的設(shè)計(jì),功能覆蓋整個(gè)爬蟲(chóng)的生命周期(鏈接提取、頁(yè)面下載、內(nèi)容抽取、持久化),支持多線程抓取,分布式抓取,并支持自動(dòng)重試、自定義UA/cookie等功能。
二、概覽
WebMagic項(xiàng)目代碼分為核心和擴(kuò)展兩部分。核心部分(webmagic-core)是一個(gè)精簡(jiǎn)的、模塊化的爬蟲(chóng)實(shí)現(xiàn),而擴(kuò)展部分則包括一些便利的、實(shí)用性的功能(例如注解模式編寫(xiě)爬蟲(chóng)等)。
WebMagic的結(jié)構(gòu)分為Downloader、PageProcessor、Scheduler、Pipeline四大組件,并由Spider將它們彼此組織起來(lái)。這四大組件對(duì)應(yīng)爬蟲(chóng)生命周期中的下載、處理、管理和持久化等功能。而Spider則將這幾個(gè)組件組織起來(lái),讓它們可以互相交互,流程化的執(zhí)行,可以認(rèn)為Spider是一個(gè)大的容器,它也是WebMagic邏輯的核心。
2.1 WebMagic的四個(gè)組件
Downloader
Downloader負(fù)責(zé)從互聯(lián)網(wǎng)上下載頁(yè)面,以便后續(xù)處理。WebMagic默認(rèn)使用了Apache HttpClient作為下載工具。
PageProcessor
PageProcessor負(fù)責(zé)解析頁(yè)面,抽取有用信息,以及發(fā)現(xiàn)新的鏈接。WebMagic使用Jsoup作為HTML解析工具,并基于其開(kāi)發(fā)了解析XPath的工具Xsoup。在這四個(gè)組件中,PageProcessor對(duì)于每個(gè)站點(diǎn)每個(gè)頁(yè)面都不一樣,是需要使用者定制的部分。
Scheduler
Scheduler負(fù)責(zé)管理待抓取的URL,以及一些去重的工作。WebMagic默認(rèn)提供了JDK的內(nèi)存隊(duì)列來(lái)管理URL,并用集合來(lái)進(jìn)行去重。也支持使用Redis進(jìn)行分布式管理。除非項(xiàng)目有一些特殊的分布式需求,否則無(wú)需自己定制Scheduler。
Pipeline
Pipeline負(fù)責(zé)抽取結(jié)果的處理,包括計(jì)算、持久化到文件、數(shù)據(jù)庫(kù)等。WebMagic默認(rèn)提供了“輸出到控制臺(tái)”和“保存到文件”兩種結(jié)果處理方案。Pipeline定義了結(jié)果保存的方式,如果你要保存到指定數(shù)據(jù)庫(kù),則需要編寫(xiě)對(duì)應(yīng)的Pipeline。對(duì)于一類(lèi)需求一般只需編寫(xiě)一個(gè)Pipeline。
2.2 用于數(shù)據(jù)流轉(zhuǎn)的對(duì)象
Request
Request是對(duì)URL地址的一層封裝,一個(gè)Request對(duì)應(yīng)一個(gè)URL地址。它是PageProcessor與Downloader交互的載體,也是PageProcessor控制Downloader唯一方式。
Page
Page代表了從Downloader下載到的一個(gè)頁(yè)面——可能是HTML,也可能是JSON或者其他文本格式的內(nèi)容。Page是WebMagic抽取過(guò)程的核心對(duì)象,它提供一些方法可供抽取、結(jié)果保存等。
ReusltItems
ReusltItems相當(dāng)于一個(gè)Map,它保存PageProcessor處理的結(jié)果,供Pipeline使用。它的API與Map很類(lèi)似,值得注意的是它有一個(gè)字段skip,若設(shè)置為true,則不應(yīng)被Pipeline處理。
2.3 控制爬蟲(chóng)運(yùn)轉(zhuǎn)的引擎—Spider
Spider是WebMagic內(nèi)部流程的核心。Downloader、PageProcessor、Scheduler、Pipeline都是Spider的一個(gè)屬性,這些屬性是可以自由設(shè)置的,通過(guò)設(shè)置這個(gè)屬性可以實(shí)現(xiàn)不同的功能。Spider也是WebMagic操作的入口,它封裝了爬蟲(chóng)的創(chuàng)建、啟動(dòng)、停止、多線程等功能。
對(duì)于編寫(xiě)一個(gè)爬蟲(chóng),PageProcessor是需要編寫(xiě)的部分,而Spider則是創(chuàng)建和控制爬蟲(chóng)的入口。
2.4 WebMagic項(xiàng)目組成
WebMagic項(xiàng)目代碼包括幾個(gè)部分,在根目錄下以不同目錄名分開(kāi)。它們都是獨(dú)立的Maven項(xiàng)目。
WebMagic主要包括兩個(gè)包,這兩個(gè)包經(jīng)過(guò)廣泛實(shí)用,已經(jīng)比較成熟:
webmagic-core
webmagic-core是WebMagic核心部分,只包含爬蟲(chóng)基本模塊和基本抽取器。
webmagic-extension
webmagic-extension是WebMagic的主要擴(kuò)展模塊,提供一些更方便的編寫(xiě)爬蟲(chóng)的工具。包括注解格式定義爬蟲(chóng)、JSON、分布式等支持。
三、 基本的爬蟲(chóng)
3.1 爬蟲(chóng)的流程 (可以參考上邊的框架架構(gòu)圖)
Downloader-頁(yè)面下載
頁(yè)面下載是一切爬蟲(chóng)的開(kāi)始。
大部分爬蟲(chóng)都是通過(guò)模擬http請(qǐng)求,接收并分析響應(yīng)來(lái)完成。這方面,JDK自帶的HttpURLConnection可以滿足最簡(jiǎn)單的需要,而Apache HttpClient(4.0后整合到HttpCompenent項(xiàng)目中)則是開(kāi)發(fā)復(fù)雜爬蟲(chóng)的不二之選。它支持自定義HTTP頭(對(duì)于爬蟲(chóng)比較有用的就是User-agent、cookie等)、自動(dòng)redirect、連接復(fù)用、cookie保留、設(shè)置代理等諸多強(qiáng)大的功能。
webmagic使用了HttpClient 4.2,并封裝到了HttpClientDownloader。學(xué)習(xí)HttpClient的使用對(duì)于構(gòu)建高性能爬蟲(chóng)是非常有幫助的,官方的Tutorial就是很好的學(xué)習(xí)資料。目前webmagic對(duì)HttpClient的使用仍在初步階段,不過(guò)對(duì)于一般抓取任務(wù),已經(jīng)夠用了
PageProcessor-頁(yè)面分析及鏈接抽取
Selector是webmagic為了簡(jiǎn)化頁(yè)面抽取開(kāi)發(fā)的獨(dú)立模塊,是整個(gè)項(xiàng)目中我最得意的部分。這里整合了CSS Selector、XPath和正則表達(dá)式,并可以進(jìn)行鏈?zhǔn)降某槿。苋菀拙蛯?shí)現(xiàn)強(qiáng)大的功能。即使你使用自己開(kāi)發(fā)的爬蟲(chóng)工具,webmagic的Selector仍然值得一試
Jsoup
HtmlParser
Apache tika
HtmlCleaner與Xpath
這里說(shuō)的頁(yè)面分析主要指HTML頁(yè)面的分析。頁(yè)面分析可以說(shuō)是垂直爬蟲(chóng)最復(fù)雜的一部分,在webmagic里,PageProcessor是定制爬蟲(chóng)的核心。通過(guò)編寫(xiě)一個(gè)實(shí)現(xiàn)PageProcessor接口的類(lèi),就可以定制一個(gè)自己的爬蟲(chóng)
HTML分析是一個(gè)比較復(fù)雜的工作,Java世界主要有幾款比較方便的分析工具:
webmagic的Selector
Scheduler-URL管理
URL管理的問(wèn)題可大可小。對(duì)于小規(guī)模的抓取,URL管理是很簡(jiǎn)單的。我們只需要將待抓取URL和已抓取URL分開(kāi)保存,并進(jìn)行去重即可。使用JDK內(nèi)置的集合類(lèi)型Set、List或者Queue都可以滿足需要。如果我們要進(jìn)行多線程抓取,則可以選擇線程安全的容器,例如LinkedBlockingQueue以及ConcurrentHashMap。因?yàn)樾∫?guī)模的URL管理非常簡(jiǎn)單,很多框架都并不將其抽象為一個(gè)模塊,而是直接融入到代碼中。但是實(shí)際上,抽象出Scheduler模塊,會(huì)使得框架的解耦程度上升一個(gè)檔次,并非常容易進(jìn)行橫向擴(kuò)展,這也是我從scrapy中學(xué)到的。
Pipeline-離線處理和持久化
Pipeline其實(shí)也是容易被忽略的一部分。大家都知道持久化的重要性,但是很多框架都選擇直接在頁(yè)面抽取的時(shí)候?qū)⒊志没黄鹜瓿桑鏲rawer4j。但是Pipeline真正的好處是,將頁(yè)面的在線分析和離線處理拆分開(kāi)來(lái),可以在一些線程里進(jìn)行下載,另一些線程里進(jìn)行處理和持久化。
3.2 使用WebMagic爬取一個(gè)壁紙網(wǎng)站
首先引入WebMagic的依賴,webmagic-core-{version}.jar和webmagic-extension-{version}.jar。在項(xiàng)目中添加這兩個(gè)包的依賴,即可使用WebMagic。
maven中引入依賴jar包
dependency
groupIdus.codecraft/groupId
artifactIdwebmagic-core/artifactId
version0.5.3/version
/dependency
dependency
groupIdus.codecraft/groupId
artifactIdwebmagic-extension/artifactId
version0.5.3/version
/dependency1234567891012345678910
不使用maven的用戶,可以去中下載最新的jar包。
網(wǎng)站標(biāo)題:java訂單頁(yè)面代碼,java訂單生成
路徑分享:http://vcdvsql.cn/article12/hsoidc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、微信公眾號(hào)、企業(yè)建站、軟件開(kāi)發(fā)、外貿(mào)網(wǎng)站建設(shè)、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)