java正則表達(dá)式解析html示例分享
package work;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
public class chuanboyi {
public static void main(String[] args){
// TODO Auto-generated method stub
StringBuffer html = new StringBuffer();
HttpClient httpclient = new HttpClient();
//創(chuàng)建GET方法實(shí)例
GetMethod getMethod = new GetMethod("//www.dhdzp.com");
//使用系統(tǒng)提供的默認(rèn)恢復(fù)策略
getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());
try{
//執(zhí)行GET方法
int statusCode = httpclient.executeMethod(getMethod);
if(statusCode != HttpStatus.SC_OK){
System.out.println("Method is wrong " + getMethod.getStatusLine());
}
InputStream responseBody = getMethod.getResponseBodyAsStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(responseBody,"utf-8"));
String line = reader.readLine();
while(line != null){
html.append(line).append("\n");
line = reader.readLine();
}
reader.close();
//正則表達(dá)式
String regex = "<form name=\"compareForm\"[\\s\\S]+>[\\s\\S]+</form>.*<script.*>";
String regexa ="(?<=<li>)[\\s\\S]+?(?=</li>)";
Pattern pattern = Pattern.compile(regex);
Matcher m = pattern.matcher(html);
StringBuffer str = new StringBuffer();
int i = 0;
while(m.find()){
str.append(m.group());
}
pattern = Pattern.compile(regexa);
m = pattern.matcher(str);
while(m.find()){
attrs(m.group());
i++;
}
System.out.println("共有"+i+"條數(shù)據(jù)!");
}catch (HttpException e) {
// TODO: handle exception
System.out.println("Please check your provided http address!");
e.printStackTrace();
}catch (IOException e) {
// TODO: handle exception
System.out.println("the line is wrong!");
e.printStackTrace();
}finally{
getMethod.releaseConnection();//釋放鏈接
}
}
public static void attrs(String str){
//獲取url的正則表達(dá)式
String regexURL = "[a-z]+-[0-9]+\\.html";
//獲取Name的正則表達(dá)式
String regexName = "(?<=title=\")[[\\w-\\s][^x00-xff]]+(?=\")";
//獲取圖片的正則表達(dá)式
String regexPicture = "images.*\\.jpg";
Pattern patternURL = Pattern.compile(regexURL);
Pattern patternName = Pattern.compile(regexName);
Pattern patternPicture = Pattern.compile(regexPicture);
Matcher mURL = patternURL.matcher(str);
Matcher mName = patternName.matcher(str);
Matcher mPicture = patternPicture.matcher(str);
if(mName.find()){
System.out.println("名字:"+mName.group());
}
if(mURL.find()){
System.out.println("鏈接:"+mURL.group());
}
if(mPicture.find()){
System.out.println("圖片:"+mPicture.group());
}
}
}
相關(guān)文章
SpringBoot整合EasyExcel?3.x的完整示例
EasyExcel 是一個(gè)基于 Java 的、快速、簡(jiǎn)潔、解決大文件內(nèi)存溢出的 Excel 處理工具,它能讓你在不用考慮性能、內(nèi)存的等因素的情況下,快速完成 Excel 的讀、寫等功能,這篇文章主要介紹了SpringBoot整合EasyExcel3.x的過(guò)程,需要的朋友可以參考下2023-07-07
springboot+WebMagic+MyBatis爬蟲(chóng)框架的使用
本文是對(duì)spring boot+WebMagic+MyBatis做了整合,使用WebMagic爬取數(shù)據(jù),然后通過(guò)MyBatis持久化爬取的數(shù)據(jù)到mysql數(shù)據(jù)庫(kù)。具有一定的參考價(jià)值,感興趣的可以了解一下2021-08-08
feign 調(diào)用第三方服務(wù)中部分特殊符號(hào)未轉(zhuǎn)義問(wèn)題
這篇文章主要介紹了feign 調(diào)用第三方服務(wù)中部分特殊符號(hào)未轉(zhuǎn)義問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
java基礎(chǔ)篇之Date類型最常用的時(shí)間計(jì)算(相當(dāng)全面)
這篇文章主要給大家介紹了關(guān)于java基礎(chǔ)篇之Date類型最常用的時(shí)間計(jì)算的相關(guān)資料,Java中的Date類是用來(lái)表示日期和時(shí)間的類,它提供了一些常用的方法來(lái)處理日期和時(shí)間的操作,需要的朋友可以參考下2023-12-12
淺談Java程序運(yùn)行機(jī)制及錯(cuò)誤分析
這篇文章主要主要介紹了Java虛擬機(jī)(JVM)的有關(guān)內(nèi)容以及Java程序的運(yùn)行機(jī)制和錯(cuò)誤分析,需要的朋友可以了解下。2017-09-09
Java設(shè)計(jì)模式以虹貓藍(lán)兔的故事講解適配器模式
適配器模式(Adapter?Pattern)是作為兩個(gè)不兼容的接口之間的橋梁。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它結(jié)合了兩個(gè)獨(dú)立接口的功能2022-04-04
IntelliJ IDEA Java項(xiàng)目手動(dòng)添加依賴 jar 包的方法(圖解)
這篇文章主要介紹了IntelliJ IDEA Java項(xiàng)目手動(dòng)添加依賴 jar 包,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
Java中Date,Calendar,Timestamp的區(qū)別以及相互轉(zhuǎn)換與使用
以下是對(duì)Java中Date,Calendar,Timestamp的區(qū)別以及相互轉(zhuǎn)換與使用進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下2013-09-09

