java利用url實(shí)現(xiàn)網(wǎng)頁內(nèi)容的抓取
閑來無事,剛學(xué)會把git部署到遠(yuǎn)程服務(wù)器,沒事做,所以簡單做了一個抓取網(wǎng)頁信息的小工具,里面的一些數(shù)值如果設(shè)成參數(shù)的話可能擴(kuò)展性能會更好!希望這是一個好的開始把,也讓我對字符串的讀取掌握的更加熟練了,值得注意的是JAVA1.8 里面在使用String拼接字符串的時候,會自動把你要拼接的字符串用StringBulider來處理,大大優(yōu)化了String 的性能,閑話不多說,show my XXX code~
運(yùn)行效果:
首先打開百度百科,搜索詞條,比如“演員”,再按F12查看源碼
然后抓取你想要的標(biāo)簽,注入LinkedHashMap里面就ok了,很簡單是吧!看看代碼羅
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.*; /** * Created by chunmiao on 17-3-10. */ public class ReadBaiduSearch { //儲存返回結(jié)果 private LinkedHashMap<String,String> mapOfBaike; //獲取搜索信息 public LinkedHashMap<String,String> getInfomationOfBaike(String infomationWords) throws IOException { mapOfBaike = getResult(infomationWords); return mapOfBaike; } //通過網(wǎng)絡(luò)鏈接獲取信息 private static LinkedHashMap<String, String> getResult(String keywords) throws IOException { //搜索的url String keyUrl = "http://baike.baidu.com/search?word=" + keywords; //搜索詞條的節(jié)點(diǎn) String startNode = "<dl class=\"search-list\">"; //詞條的鏈接關(guān)鍵字 String keyOfHref = "href=\""; //詞條的標(biāo)題關(guān)鍵字 String keyOfTitle = "target=\"_blank\">"; String endNode = "</dl>"; boolean isNode = false; String title; String href; String rLine; LinkedHashMap<String,String> keyMap = new LinkedHashMap<String,String>(); //開始網(wǎng)絡(luò)請求 URL url = new URL(keyUrl); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); InputStreamReader inputStreamReader = new InputStreamReader(urlConnection.getInputStream(),"utf-8"); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); //讀取網(wǎng)頁內(nèi)容 while ((rLine = bufferedReader.readLine()) != null){ //判斷目標(biāo)節(jié)點(diǎn)是否出現(xiàn) if(rLine.contains(startNode)){ isNode = true; } //若目標(biāo)節(jié)點(diǎn)出現(xiàn),則開始抓取數(shù)據(jù) if (isNode){ //若目標(biāo)結(jié)束節(jié)點(diǎn)出現(xiàn),則結(jié)束讀取,節(jié)省讀取時間 if (rLine.contains(endNode)) { //關(guān)閉讀取流 bufferedReader.close(); inputStreamReader.close(); break; } //若值為空則不讀取 if (((title = getName(rLine,keyOfTitle)) != "") && ((href = getHref(rLine,keyOfHref)) != "")){ keyMap.put(title,href); } } } return keyMap; } //獲取詞條對應(yīng)的url private static String getHref(String rLine,String keyOfHref){ String baikeUrl = "http://baike.baidu.com"; String result = ""; if(rLine.contains(keyOfHref)){ //獲取url for (int j = rLine.indexOf(keyOfHref) + keyOfHref.length();j < rLine.length()&&(rLine.charAt(j) != '\"');j ++){ result += rLine.charAt(j); } //獲取的url中可能不含baikeUrl,如果沒有則在頭部添加一個 if(!result.contains(baikeUrl)){ result = baikeUrl + result; } } return result; } //獲取詞條對應(yīng)的名稱 private static String getName(String rLine,String keyOfTitle){ String result = ""; //獲取標(biāo)題內(nèi)容 if(rLine.contains(keyOfTitle)){ result = rLine.substring(rLine.indexOf(keyOfTitle) + keyOfTitle.length(),rLine.length()); //將標(biāo)題中的內(nèi)容含有的標(biāo)簽去掉 result = result.replaceAll("<em>|</em>|</a>|<a>",""); } return result; } }
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!
- JavaWeb項(xiàng)目打開網(wǎng)頁出現(xiàn)Session Error的異常解決方案
- java通過Jsoup爬取網(wǎng)頁過程詳解
- 詳解java實(shí)現(xiàn)簡單掃碼登錄功能(模仿微信網(wǎng)頁版掃碼)
- java調(diào)用微信接口實(shí)現(xiàn)網(wǎng)頁分享小功能
- Java實(shí)現(xiàn)微信網(wǎng)頁授權(quán)的示例代碼
- Java實(shí)現(xiàn)的簡單網(wǎng)頁截屏功能示例
- 詳解JAVA抓取網(wǎng)頁的圖片,JAVA利用正則表達(dá)式抓取網(wǎng)站圖片
- Java導(dǎo)出網(wǎng)頁表格Excel過程詳解
相關(guān)文章
java:java.lang.ExceptionInInitializerError報(bào)錯解決過程
這篇文章主要給大家介紹了關(guān)于java:java.lang.ExceptionInInitializerError報(bào)錯的解決過程,java.lang.ExceptionInInitializerError 是一個異常,表示在初始化一個類的靜態(tài)變量或靜態(tài)塊時發(fā)生了錯誤,需要的朋友可以參考下2023-10-10手?jǐn)]一個Spring?Boot?Starter并上傳到Maven中央倉庫
本文主要介紹了手?jǐn)]一個Spring?Boot?Starter并上傳到Maven中央倉庫,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05使用Springboot實(shí)現(xiàn)OAuth服務(wù)的示例詳解
OAuth(Open Authorization)是一個開放標(biāo)準(zhǔn),用于授權(quán)第三方應(yīng)用程序訪問用戶資源,而不需要共享用戶憑證。本文主要介紹了如何使用Springboot實(shí)現(xiàn)一個OAuth服務(wù),需要的可以參考一下2023-05-05Java技能點(diǎn)之SimpleDateFormat進(jìn)行日期格式化問題
這篇文章主要介紹了Java技能點(diǎn)之SimpleDateFormat進(jìn)行日期格式化問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04java 中多線程生產(chǎn)者消費(fèi)者問題詳細(xì)介紹
這篇文章主要介紹了java 中多線程生產(chǎn)者消費(fèi)者問題詳細(xì)介紹的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-09-09