利用Regular Expression抓取網頁中的圖片
Regular Expression是門高深的學問,對於這種火星符號,好用歸好用
但是看了真的會很想砸電腦,但是還是得硬著頭皮學下去,剛好今天這個
範例是拿來抓網頁圖片,多少可以激發一點學習的動力,寫出來後,以後就
可以寫個偷圖的程式啦。
先附上保哥的學習資源:整理一些 Regex 的學習資源
我就直接在頁面上放一個<input type=”text”value=”抓圖”/>的tag
然後POST我要的網址回Controller,利用HttpWebRequest取得回應的Html,再直接丟出我篩過的字串
[HttpPost]
public ActionResult Index(string url)
{
//利用HttpWebRequest來模擬瀏覽器的動作,這邊傳入網址,然後取得回應的網頁
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Method = "GET";
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
//得到回應後,將回應的Html變成資料流等等要讀成字串
using (StreamReader myStreamReader =
new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
string data = myStreamReader.ReadToEnd();
//這個regular expression...嗯..很難解釋
//把開頭是img後面任意字元 然後包含src="..."結尾是"的字串篩出來
//這邊用了一個群組,名稱是imgsrc,群組中存的是圖片的路徑
string regular = "<img.+?src=\"(?<imgsrc>.+?)\"";
string p = "";
foreach (Match m in Regex.Matches(data, regular))
{
p += m.Groups["imgsrc"].Value + "<br/>";
p += m.Value + "<br/><hr/>";
}
return Content(p);
}
}
}
Post回去之後,傳回所有的圖以及路徑
不錯吧,利用Regular Expression 短短幾行Code就可以寫出抓圖的程式了。
經過這次我也了解到為什麼Regular Expression這麼難懂,因為懂的人也很難用
三言兩語解釋給別人聽,還是要靠自己多看一些規則,慢慢拆解釐清,才有辦法
熟練這項能力吧。