java利用url實(shí)現(xiàn)網(wǎng)頁內(nèi)容的抓取
閑來無事,剛學(xué)會把git部署到遠(yuǎn)程服務(wù)器,沒事做,所以簡單做了一個(gè)抓取網(wǎng)頁信息的小工具,里面的一些數(shù)值如果設(shè)成參數(shù)的話可能擴(kuò)展性能會更好!希望這是一個(gè)好的開始把,也讓我對字符串的讀取掌握的更加熟練了,值得注意的是JAVA1.8 里面在使用String拼接字符串的時(shí)候,會自動把你要拼接的字符串用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é)省讀取時(shí)間
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,如果沒有則在頭部添加一個(gè)
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í)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!
- 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遠(yuǎn)程連接Linux執(zhí)行命令的3種方式完整代碼
在一些Java應(yīng)用程序中需要執(zhí)行一些Linux系統(tǒng)命令,例如服務(wù)器資源查看、文件操作等,這篇文章主要給大家介紹了關(guān)于java遠(yuǎn)程連接Linux執(zhí)行命令的3種方式,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-06-06
詳解如何使用IntelliJ IDEA新建一個(gè)Servlet項(xiàng)目
這篇文章主要介紹了詳解如何使用IntelliJ IDEA新建一個(gè)Servlet項(xiàng)目,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-11-11
SpringCloud Zuul和Gateway的實(shí)例代碼(搭建方式)
本文主要介紹了SpringCloudZuul和SpringCloudGateway的簡單示例,SpringCloudGateway是推薦使用的API網(wǎng)關(guān)解決方案,基于SpringFramework5和ProjectReactor構(gòu)建,具有更高的性能和吞吐量2025-02-02
SpringBoot+阿里云OSS實(shí)現(xiàn)在線視頻播放的示例
這篇文章主要介紹了SpringBoot+阿里云OSS實(shí)現(xiàn)在線視頻播放的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
Spring事務(wù)aftercommit原理及實(shí)踐
這篇文章主要為大家介紹了Spring事務(wù)aftercommit原理及實(shí)踐,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
Spring中@Value設(shè)置默認(rèn)值問題解決
本文主要介紹了Spring中@Value設(shè)置默認(rèn)值問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
Java數(shù)據(jù)敏感詞轉(zhuǎn)換成符號的方法詳解
在某個(gè)論壇下用戶可以隨意留言,為了防止不法分子在網(wǎng)上任意沖浪,需要對一些敏感詞匯進(jìn)行一些校驗(yàn),所以這篇文章給大家介紹了Java數(shù)據(jù)敏感詞轉(zhuǎn)換成符號的方法,需要的朋友可以參考下2024-03-03

