⑴ 關於java中arraylist的使用問題——數據覆蓋
GoodsBean gBean;這句改為GoodsBean gBean=new GoodBean(); 因為你沒有為這個對象開辟一個新的內存空間,所以每次循環的時候都是把之前的那個對象引用重新指向到當前對象。到最後所有的對象都引用最後一次循環中對象的地址,所以list裡面的對象都是最後一次循環的內容。希望對你有所幫助
⑵ 如何用java實現抓取商城商品信息到自己的頁面上來!!! 求解啊,大神們!!
對於加密的網站還沒去研究,不知道能不能抓取,現在只是對一些沒有加密的網站進行網頁數據抓取。剛剛開始寫的時候以為很多網站都能抓取,但是發現很多都加密了,本來以為一些地址可以通過網頁數據檢測工具測出他的數據變化,但是只能監測到一些通過js顯示的數據,依然不能抓取到加密的網站。嗨,這個問題以後再說吧。
[java]
import java.net.* ;
import java.io.* ;
import java.util.regex.* ;
public class Capture{
public static void main(String args[])throws Exception{
System.out.println("*************************手機號查詢************************") ;
System.out.println("我的位置是:" + new GrabMobile().grabMobileLocation("15023141745")) ;
System.out.println("手機卡類型是:" + new GrabMobile().grabMobileType("15023141745")) ;
System.out.println("我的郵編是:" + new GrabMobile().grabMobilePost("15023141745")) ;
System.out.println("*************************身份證查詢************************") ;
System.out.println("我的性別是:" + new GrabIdentity().grabIdentitySex("362203199208243575")) ;
System.out.println("我的生日是:" + new GrabIdentity().grabIdentityBirth("362203199208243575")) ;
System.out.println("我的家鄉是:" + new GrabIdentity().grabIdentityHome("362203199208243575")) ;
}
}
class GrabMobile{
public String grabMobileLocation(String m)throws Exception{
String strUrl = "http://www.ip138.com:8080/search.asp?action=mobile&mobile=" + m;
URL url = new URL(strUrl) ;
HttpURLConnection httpUrlCon = (HttpURLConnection)url.openConnection() ;
InputStreamReader inRead = new InputStreamReader(httpUrlCon.getInputStream(),"GBK") ;
BufferedReader bufRead = new BufferedReader(inRead) ;
StringBuffer strBuf = new StringBuffer() ;
String line = "" ;
while ((line = bufRead.readLine()) != null) {
strBuf.append(line);
}
String strStart = "卡號歸屬地" ;
String strEnd = "卡 類 型";
String strAll = strBuf.toString() ;
int start = strAll.indexOf(strStart) ;
int end = strAll.indexOf(strEnd) ;
String result = strAll.substring(start+42,end-33) ;
result = drawChMob(result) ;
return result ;
}
public String grabMobileType(String m)throws Exception{
String strUrl = "http://www.ip138.com:8080/search.asp?action=mobile&mobile=" + m;
URL url = new URL(strUrl) ;
HttpURLConnection httpUrlCon = (HttpURLConnection)url.openConnection() ;
InputStreamReader inRead = new InputStreamReader(httpUrlCon.getInputStream(),"GBK") ;
BufferedReader bufRead = new BufferedReader(inRead) ;
StringBuffer strBuf = new StringBuffer() ;
String line = "" ;
while ((line = bufRead.readLine()) != null) {
strBuf.append(line);
}
String strStart = "卡 類 型" ;
String strEnd = "<TD align=\"center\">區 號</TD>";
String strAll = strBuf.toString() ;
int start = strAll.indexOf(strStart) ;
int end = strAll.indexOf(strEnd) ;
String result = strAll.substring(start+12,end) ;
result = drawChMob(result) ;
result = result.substring(1) ;
return result ;
}
public String grabMobilePost(String m)throws Exception{
String strUrl = "http://www.ip138.com:8080/search.asp?action=mobile&mobile=" + m;
URL url = new URL(strUrl) ;
HttpURLConnection httpUrlCon = (HttpURLConnection)url.openConnection() ;
InputStreamReader inRead = new InputStreamReader(httpUrlCon.getInputStream(),"GBK") ;
BufferedReader bufRead = new BufferedReader(inRead) ;
StringBuffer strBuf = new StringBuffer() ;
String line = "" ;
while ((line = bufRead.readLine()) != null) {
strBuf.append(line);
}
String strStart = "郵 編" ;
String strEnd = "更詳細的..";
String strAll = strBuf.toString() ;
int start = strAll.indexOf(strStart) ;
int end = strAll.indexOf(strEnd) ;
String result = strAll.substring(start+40,end-55) ;
return result ;
}
public String drawChMob(String str){
StringBuffer strBuf = new StringBuffer() ;
String regex="([\u4e00-\u9fa5]+)";
Matcher matcher = Pattern.compile(regex).matcher(str);
while(matcher.find()){
strBuf.append(matcher.group(0)).toString() ;
}
return strBuf.toString() ;
}
}
class GrabIdentity{
public String grabIdentitySex(String userid)throws Exception{
String strUrl = "http://qq.ip138.com/idsearch/index.asp?action=idcard&userid=" + userid + "&B1=%B2%E9+%D1%AF";
URL url = new URL(strUrl) ;
HttpURLConnection httpUrlCon = (HttpURLConnection)url.openConnection() ;
InputStreamReader inRead = new InputStreamReader(httpUrlCon.getInputStream(),"GBK") ;
BufferedReader bufRead = new BufferedReader(inRead) ;
StringBuffer strBuf = new StringBuffer() ;
String line = "" ;
while ((line = bufRead.readLine()) != null) {
strBuf.append(line);
}
String strStart = " 別" ;
String strEnd = "出生日期";
String strAll = strBuf.toString() ;
int start = strAll.indexOf(strStart) ;
int end = strAll.indexOf(strEnd) ;
String result = strAll.substring(start+7,end) ;
result = drawCh(result) ;
return result ;
}
public String grabIdentityBirth(String userid)throws Exception{
String strUrl = "http://qq.ip138.com/idsearch/index.asp?action=idcard&userid=" + userid + "&B1=%B2%E9+%D1%AF";
URL url = new URL(strUrl) ;
HttpURLConnection httpUrlCon = (HttpURLConnection)url.openConnection() ;
InputStreamReader inRead = new InputStreamReader(httpUrlCon.getInputStream(),"GBK") ;
BufferedReader bufRead = new BufferedReader(inRead) ;
StringBuffer strBuf = new StringBuffer() ;
String line = "" ;
while ((line = bufRead.readLine()) != null) {
strBuf.append(line);
}
String strStart = "出生日期:</td><td class=\"tdc2\">" ;
String strEnd = "</td><tr><tr><td class=";
String strAll = strBuf.toString() ;
int start = strAll.indexOf(strStart) ;
int end = strAll.indexOf(strEnd) ;
String result = strAll.substring(start+27,end) ;
return result ;
}
public String grabIdentityHome(String userid)throws Exception{
String strUrl = "http://qq.ip138.com/idsearch/index.asp?action=idcard&userid=" + userid + "&B1=%B2%E9+%D1%AF";
URL url = new URL(strUrl) ;
HttpURLConnection httpUrlCon = (HttpURLConnection)url.openConnection() ;
InputStreamReader inRead = new InputStreamReader(httpUrlCon.getInputStream(),"GBK") ;
BufferedReader bufRead = new BufferedReader(inRead) ;
StringBuffer strBuf = new StringBuffer() ;
String line = "" ;
while ((line = bufRead.readLine()) != null) {
strBuf.append(line);
}
String strStart = "證 地:</td><td class=\"tdc2\">" ;
String strEnd = "<br/></td></tr><tr><td class=\"tdc3\" valign=\"top\" align=\"right\">部分或" ;
String strAll = strBuf.toString() ;
int start = strAll.indexOf(strStart) ;
int end = strAll.indexOf(strEnd) ;
String result = strAll.substring(start+31,end) ;
return result ;
}
public String drawCh(String str){
StringBuffer strBuf = new StringBuffer() ;
String regex="([\u4e00-\u9fa5]+)";
Matcher matcher = Pattern.compile(regex).matcher(str);
if(matcher.find()){
str = strBuf.append(matcher.group(0)).toString() ;
}
return str ;
}
}
待會傳上改裝成的android小程序,可以手機號查詢和身份證查詢。
⑶ 怎麼用java調用淘寶開發平台獲得淘寶的所有的類目,要詳細的介面
淘寶的API有些是開放的,我查了一下所有類目的API是收費的,需要申請APIKey,然後調用對應查詢介面,就能返回XML或JSON數據進行自己的處理了。
如果真是開發需要,就可以買淘寶的服務啊。
調用很簡單,比如taobao.itemcats.get 介面(獲取後台供賣家發布商品的標准商品類目),如下Java代碼就返回結果了(前提是提供APIKey,需要申請審核)
TaobaoClientclient=newDefaultTaobaoClient(url,appkey,secret);
ItemcatsGetRequestreq=newItemcatsGetRequest();
req.setFields("cid,parent_cid,name,is_parent");
req.setParentCid(50011999L);
req.setCids("18957,19562,");
ItemcatsGetResponseresponse=client.execute(req);
另外,變通的方法是自己開發爬蟲,在淘寶頁面上抓取,但問題是得不到淘寶技術支持,比如淘寶改版後也得跟著改動爬蟲代碼。
⑷ JAVA中,定義了一個物品集合,如何通過一個商品的編號得到該商品的所有信息。
首先你自己創建一個商品類,比如 class Goods{},然後在這個類里邊定義這些屬性,比如你的name,price等,然後分別實現他們的get、set方法,完了之後定義一個list。
比如:list<Goods> glist = new ArrayList<Goods>();
現在你可以創建商品並將其放入這個list集合中了。
比如:Goods good = new Goods();
good.setGoodsId("goodsId"); good.setName("goodsName"); ...
然後將good存入list中,glist.add(good);
然後我們再定義第二件商品,比如是一個鍵盤
good = new Goods(); good.setName("鍵盤");.....
同樣我們再將其放入list中,glist.add(good);
此時glist中有兩件商品,假設我們現在輸出第二件商品的所有信息
System.out.println(glist.get(1).getGoodsId());
System.out.println(glist.get(1).getName);
.......
注意,第一件商品為get(0),下標和數組類似
⑸ 使用java語言爬取自己的淘寶訂單看看買了哪些東西
Java爬蟲框架WebMagic簡介及使用
一、介紹
webmagic的是一個無須配置、便於二次開發的爬蟲框架,它提供簡單靈活的API,只需少量代碼即可實現一個爬蟲。webmagic採用完全模塊化的設計,功能覆蓋整個爬蟲的生命周期(鏈接提取、頁面下載、內容抽取、持久化),支持多線程抓取,分布式抓取,並支持自動重試、自定義UA/cookie等功能。
二、概覽
WebMagic項目代碼分為核心和擴展兩部分。核心部分(webmagic-core)是一個精簡的、模塊化的爬蟲實現,而擴展部分則包括一些便利的、實用性的功能(例如註解模式編寫爬蟲等)。
WebMagic的結構分為Downloader、PageProcessor、Scheler、Pipeline四大組件,並由Spider將它們彼此組織起來。這四大組件對應爬蟲生命周期中的下載、處理、管理和持久化等功能。而Spider則將這幾個組件組織起來,讓它們可以互相交互,流程化的執行,可以認為Spider是一個大的容器,它也是WebMagic邏輯的核心。
2.1 WebMagic的四個組件
Downloader
Downloader負責從互聯網上下載頁面,以便後續處理。WebMagic默認使用了Apache HttpClient作為下載工具。
PageProcessor
PageProcessor負責解析頁面,抽取有用信息,以及發現新的鏈接。WebMagic使用Jsoup作為HTML解析工具,並基於其開發了解析XPath的工具Xsoup。在這四個組件中,PageProcessor對於每個站點每個頁面都不一樣,是需要使用者定製的部分。
Scheler
Scheler負責管理待抓取的URL,以及一些去重的工作。WebMagic默認提供了JDK的內存隊列來管理URL,並用集合來進行去重。也支持使用Redis進行分布式管理。除非項目有一些特殊的分布式需求,否則無需自己定製Scheler。
Pipeline
Pipeline負責抽取結果的處理,包括計算、持久化到文件、資料庫等。WebMagic默認提供了「輸出到控制台」和「保存到文件」兩種結果處理方案。Pipeline定義了結果保存的方式,如果你要保存到指定資料庫,則需要編寫對應的Pipeline。對於一類需求一般只需編寫一個Pipeline。
2.2 用於數據流轉的對象
Request
Request是對URL地址的一層封裝,一個Request對應一個URL地址。它是PageProcessor與Downloader交互的載體,也是PageProcessor控制Downloader唯一方式。
Page
Page代表了從Downloader下載到的一個頁面——可能是HTML,也可能是JSON或者其他文本格式的內容。Page是WebMagic抽取過程的核心對象,它提供一些方法可供抽取、結果保存等。
ReusltItems
ReusltItems相當於一個Map,它保存PageProcessor處理的結果,供Pipeline使用。它的API與Map很類似,值得注意的是它有一個欄位skip,若設置為true,則不應被Pipeline處理。
2.3 控制爬蟲運轉的引擎—Spider
Spider是WebMagic內部流程的核心。Downloader、PageProcessor、Scheler、Pipeline都是Spider的一個屬性,這些屬性是可以自由設置的,通過設置這個屬性可以實現不同的功能。Spider也是WebMagic操作的入口,它封裝了爬蟲的創建、啟動、停止、多線程等功能。
對於編寫一個爬蟲,PageProcessor是需要編寫的部分,而Spider則是創建和控制爬蟲的入口。
2.4 WebMagic項目組成
WebMagic項目代碼包括幾個部分,在根目錄下以不同目錄名分開。它們都是獨立的Maven項目。
WebMagic主要包括兩個包,這兩個包經過廣泛實用,已經比較成熟:
webmagic-core
webmagic-core是WebMagic核心部分,只包含爬蟲基本模塊和基本抽取器。
webmagic-extension
webmagic-extension是WebMagic的主要擴展模塊,提供一些更方便的編寫爬蟲的工具。包括註解格式定義爬蟲、JSON、分布式等支持。
三、 基本的爬蟲
3.1 爬蟲的流程 (可以參考上邊的框架架構圖)
Downloader-頁面下載
頁面下載是一切爬蟲的開始。
大部分爬蟲都是通過模擬http請求,接收並分析響應來完成。這方面,JDK自帶的HttpURLConnection可以滿足最簡單的需要,而Apache HttpClient(4.0後整合到HttpCompenent項目中)則是開發復雜爬蟲的不二之選。它支持自定義HTTP頭(對於爬蟲比較有用的就是User-agent、cookie等)、自動redirect、連接復用、cookie保留、設置代理等諸多強大的功能。
webmagic使用了HttpClient 4.2,並封裝到了HttpClientDownloader。學習HttpClient的使用對於構建高性能爬蟲是非常有幫助的,官方的Tutorial就是很好的學習資料。目前webmagic對HttpClient的使用仍在初步階段,不過對於一般抓取任務,已經夠用了
PageProcessor-頁面分析及鏈接抽取
Selector是webmagic為了簡化頁面抽取開發的獨立模塊,是整個項目中我最得意的部分。這里整合了CSS Selector、XPath和正則表達式,並可以進行鏈式的抽取,很容易就實現強大的功能。即使你使用自己開發的爬蟲工具,webmagic的Selector仍然值得一試
Jsoup
HtmlParser
Apache tika
HtmlCleaner與Xpath
這里說的頁面分析主要指HTML頁面的分析。頁面分析可以說是垂直爬蟲最復雜的一部分,在webmagic里,PageProcessor是定製爬蟲的核心。通過編寫一個實現PageProcessor介面的類,就可以定製一個自己的爬蟲
HTML分析是一個比較復雜的工作,Java世界主要有幾款比較方便的分析工具:
webmagic的Selector
Scheler-URL管理
URL管理的問題可大可小。對於小規模的抓取,URL管理是很簡單的。我們只需要將待抓取URL和已抓取URL分開保存,並進行去重即可。使用JDK內置的集合類型Set、List或者Queue都可以滿足需要。如果我們要進行多線程抓取,則可以選擇線程安全的容器,例如LinkedBlockingQueue以及ConcurrentHashMap。因為小規模的URL管理非常簡單,很多框架都並不將其抽象為一個模塊,而是直接融入到代碼中。但是實際上,抽象出Scheler模塊,會使得框架的解耦程度上升一個檔次,並非常容易進行橫向擴展,這也是我從scrapy中學到的。
Pipeline-離線處理和持久化
Pipeline其實也是容易被忽略的一部分。大家都知道持久化的重要性,但是很多框架都選擇直接在頁面抽取的時候將持久化一起完成,例如crawer4j。但是Pipeline真正的好處是,將頁面的在線分析和離線處理拆分開來,可以在一些線程里進行下載,另一些線程里進行處理和持久化。
3.2 使用WebMagic爬取一個壁紙網站
首先引入WebMagic的依賴,webmagic-core-{version}.jar和webmagic-extension-{version}.jar。在項目中添加這兩個包的依賴,即可使用WebMagic。
maven中引入依賴jar包
不使用maven的用戶,可以去http://webmagic.io中下載最新的jar包。
⑹ java查詢商品信息
是很抽象
首先連庫(資料庫)
執行查詢語句
數值返回java界面(或jsp調用界面)
⑺ java抓取京東商城商品信息,根據網頁源文件如何寫抓取如下信息:
聽說過jsoup嗎。很簡單,抄兩句話搞定。
Document document = Jsoup
.connect("這個頁面的url例如:http://www..com")
.method(Connection.Method.GET)
.followRedirects(false)
.timeout(100000)
.get();
Element el=document.getElementById("zzh_jd")//div 開始的id 。
//然後這個element你想怎麼用就怎麼用了。
//jsoup的使用類似於javascript很方便。
⑻ 用java怎麼獲取淘寶商品鏈接中的商品id。。。你去淘寶隨便搜索一個商品
這個只能復制截取
有時候鏈接長的也很麻煩
如果自己在開店在電腦上操作會方便很多