1. 程式人生 > >JAVA獲取html網頁中的圖片src內容

JAVA獲取html網頁中的圖片src內容

有很多時候會有這樣的需求,獲取一個網頁中圖片的路徑,在Java中,可以使用Pattern類、Matcher類,配合正則表示式來獲取一個字串中需要的特定內容。

首先來看一下網頁中一個<img>標籤所處的位置,例如:String content =“<html>...<div><img alt ='xxx' src='yyy'><img alt='xxx' src='mmm'></div></html>”,其中img標籤可能的格式為 <img>或<IMG>,標籤結束方式可能為<img ... > 或者 <img ... />或者<img ...></img>  ;為了程式碼有更好的魯棒性,所以在匹配文字的時候,這些情況都需要考慮到。

我的具體思路就是,先獲取到img 標籤的內容,然後對獲取到的內容進行二次匹配,從而獲取到一個圖片地址列表。這裡邊最核心的地方就在於兩次匹配的正則表示式。以獲取上邊的content中的地址為例:

String content ="<html>...<div><img alt ='xxx' src='yyy'><img alt='xxx' src='mmm'></div></html>"
	List<String> srcList = new ArrayList<String>(); //用來儲存獲取到的圖片地址
	Pattern p = Pattern.compile("<(img|IMG)(.*?)(>|></img>|/>)");//匹配字串中的img標籤
	Matcher matcher = p.matcher(content);
	boolean hasPic = matcher.find();
	if(hasPic == true)//判斷是否含有圖片
	{
		while(hasPic) //如果含有圖片,那麼持續進行查詢,直到匹配不到
		{
			String group = matcher.group(2);//獲取第二個分組的內容,也就是 (.*?)匹配到的
			Pattern srcText = Pattern.compile("(src|SRC)=(\"|\')(.*?)(\"|\')");//匹配圖片的地址
			Matcher matcher2 = srcText.matcher(group);
			if( matcher2.find() ) 
			{
				srcList.add( matcher2.group(3) );//把獲取到的圖片地址新增到列表中
			}
			hasPic = matcher.find();//判斷是否還有img標籤
		}
			
	}
	System.out.println("匹配到的內容:"+srcList);

在這裡面最為核心的部分就是正則表示式的書寫,因為它是負責把我們的思想轉化為一個具體規則去匹配字串。在第一次匹配img標籤的時候,正則表示式是“<(img|IMG)(.*?)(>|></img>|/>)” ,其中( )是用來分組的,也就是把匹配到的內容分成幾個部分。在使用Matcher類來獲取匹配到的分組資料時,匹配到的整個字串預設為第0組,所以自己定義的組別要從第一組算起。

其中  <(img|IMG)  部分是第1組,可以匹配到img標籤的開始 。

(.*?) 是第2組,可以匹配到img標籤內的其他內容,它的含義就是匹配以任意字元開始的一個字串。?表示非貪婪模式匹配,預設是貪婪模式,貪婪模式會匹配到最長的內容,也就是在img標籤開始和結束的中間包含多個img標籤。

(>|></img>|/>) 部分是第3組,用來匹配img標籤的結束。


相關推薦

JAVA獲取html網頁圖片src內容

有很多時候會有這樣的需求,獲取一個網頁中圖片的路徑,在Java中,可以使用Pattern類、Matcher類,配合正則表示式來獲取一個字串中需要的特定內容。 首先來看一下網頁中一個<img>

Java 獲取Html文字的img標籤下src內容

/** * 得到網頁中圖片的地址 * @param htmlStr html字串 * @return List<String> */ private List<String> getImgStr(String

獲取html網頁的body部分內容

1.匯入htmlparser.jar架包 2./**      * 獲取HTML頁面中BODY標籤的內容      * @param inputHTML      *      * @return void [返回型別說明]      * @throws [違例型別] [

java去除html程式碼含有的html、js、css標籤,獲取文字內容

       現在在做政府網站,網站裡有很多公開資訊和政務諮詢的新聞,現在需要做新聞的RSS訂閱功能,其中有一項是需要處理文章頁的內容。我們後臺新增編輯文章使用的是編輯器,文章內容會帶有很多html標籤

java獲取html頁面代碼裏面的圖片的地址的集合

gpo ring util regex ati port 鏈接 get .com package com.blue.common.util;import java.util.ArrayList;import java.util.HashSet;import java.uti

zbb20180827 java獲取html內容

orm pid ace string trace static != nec class package com.zbb.test; import java.io.BufferedReader;import java.io.BufferedWriter;import jav

java通過HttpServletRequest獲取post請求的body內容

     在java web應用中,我們如何獲取post請求body中的內容?以及需要注意的問題。     通常利用request獲取引數可以直接通過req.getParameter(name)的方式獲取url上面或者ajax data提交上來的引數。但是body是沒有名字

根據地址獲取html頁面內容

private string GetHtml(string url) { // 獲取檔案 System.Text.Encoding en = System.Text.Encoding.GetEncoding("utf-8")

java獲取請求url內容

HttpServletRequest httpRequest = (HttpServletRequest) request;String strBackUrl = "http://" + reques

關於java 獲取 html select標籤 下拉框 option 文字內容 隱藏域

在HTML中從多選下拉框中提取已選中選項的文字內容到後臺,被這個問題難倒了。 demo.jsp檔案<select id="selecttype" name"type"> <option value="" selected="selected">

Java程式碼從網頁獲取資料(示例程式碼)

package com.mashensoft.net; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java

java 通過HttpServletRequest獲取post請求的body內容

/** * 獲取POST請求中Body引數 * @param request * @return 字串 */ public String getParm(HttpServletRequest request) {

正則表示式獲取HTML標記內容(C#)

//=====================Begin1========================            //試驗字串string strTmp =string.Empty;            //正則表示式string tmpStr =string.Empty;         

logo.ico在html網頁的實現

元素 美國 其他 對戰 cnblogs img 多人 load mar <!doctype html><html> <head> <meta charset="utf-8"/> <title>英雄聯盟_百度百科

gif圖再html網頁只播放一次

ges http hot 技術分享 log .cn png web web前端 ui給的gif圖放在網頁上只播放一次,怎麽也找不出來解決辦法是不是感覺自己的技術不行了,就在此時此刻不要懷疑自己,堂堂的web前端工程師不要慫。 聽我的首先打開Photoshop,然後把這個gi

網頁圖片顯示方向與實際圖片方向不一致

服務 拍攝 blog 解決 log 照片 -o 不一致 oss 圖片為手機拍攝的照片,可能存在方向問題,exif.js可以解決。 參考 http://blog.csdn.net/cdnight/article/details/46457241 每張圖片在獲取到後都用exif

HTML網頁引入Bootstrap前端框架

ble 需要 otto nta 在線 cal meta target initial Bootstrap百度百科介紹: Bootstrap,來自 Twitter,是目前很受歡迎的前端框架。Bootstrap 是基於 HTML、CSS、JAVASC

html 網頁背景圖片根據屏幕大小CSS自動縮放

val apple back clas 交互 dde fun 效果 而且 https://blog.csdn.net/coslay/article/details/47109281 騰訊微博和QQ空間的登錄背景圖片是根據訪客的屏幕大小自動縮放的,但是好像是用JQuery代碼

網頁圖片預載入的原理

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Java: 獲取jar包某個類的serialVersionUID(序列版本id)

2018.11.02 文章目錄 前言 方法 前言 在《序列化及Java Serializable序列化介面》一文,我介紹了一個case:一個已上線的版本中包含了未定義serialVersionUID序