利用Regular Expression抓取網頁中的圖片

利用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);
                }
            }
        }

dbeff768d7b14f169a3e7b198afa2bfa

Post回去之後,傳回所有的圖以及路徑

2f575e7f86474558a04ec5b9d22fc451

不錯吧,利用Regular Expression 短短幾行Code就可以寫出抓圖的程式了。

經過這次我也了解到為什麼Regular Expression這麼難懂,因為懂的人也很難用

三言兩語解釋給別人聽,還是要靠自己多看一些規則,慢慢拆解釐清,才有辦法

熟練這項能力吧。