C# 網絡編程之webBrowser獲取網頁url和下載網頁中圖片

      網友投稿 908 2025-04-05

      該文章主要是通過C#網絡編程的webBrowser獲取網頁中的url并簡單的嘗試下載網頁中的圖片,主要是為以后網絡開發的基礎學習.其中主要的通過應用程序結合網頁知識、正則表達式實現瀏覽、獲取url、下載圖片三個功能.而且很清晰的解析了每一步都是以前一步為基礎實現的.

      一. 界面設計

      界面設計如下圖所示,添加控件如圖,設置webBrowser1其Anchor屬性為Top、Bottom、Left、Right,實現對話框縮放;設置groupBox1其Dock(定義要綁到容器控件的邊框)為Buttom,實現當瀏覽器縮放時groupBox1始終在最下邊;設置listBox其HorizontalScrollbar屬性為True,顯示水平滾動條.

      二. 源代碼

      1.命名空間

      //新添加命名空間 using System.Net; using System.IO; using System.Text.RegularExpressions; //正則表達式

      2.瀏覽

      點擊"瀏覽"按鈕,生成button1_Click(object sender, EventArgs e)點擊事件中添加如下代碼,實現瀏覽網頁:

      private void button1_Click(object sender, EventArgs e) { webBrowser1.Navigate(textBox1.Text.Trim()); //顯示網頁 }

      3.獲取

      點擊"獲取"按鈕,生成button2_Click(object sender, EventArgs e)點擊事件中添加如下代碼,通過獲取"html.OuterHtml"當前網頁的HTML內容,利用正則表達式獲取網頁中所有內容的URL超鏈接和圖片的URL,并顯示在listBox控件中.

      //定義num記錄listBox2中獲取到的圖片URL個數 public int num = 0; //點擊"獲取"按鈕 private void button2_Click(object sender, EventArgs e) { HtmlElement html = webBrowser1.Document.Body; //定義HTML元素 string str = html.OuterHtml; //獲取當前元素的HTML代碼 MatchCollection matches; //定義正則表達式匹配集合 //清空 listBox1.Items.Clear(); listBox2.Items.Clear(); //獲取 try { //正則表達式獲取內容url matches = Regex.Matches(str, "(.*?)", RegexOptions.IgnoreCase); foreach (Match match in matches) { listBox1.Items.Add(match.Value.ToString()); } //正則表達式獲取圖片url matches = Regex.Matches(str, @"]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*(?[^\s\t\r\n""'<>]*)[^<>]*?/?[\s\t\r\n]*>", RegexOptions.IgnoreCase); foreach (Match match in matches) { listBox2.Items.Add(match.Value.ToString()); } //記錄圖片總數 num = listBox2.Items.Count; } catch (Exception msg) { MessageBox.Show(msg.Message); //異常處理 } }

      4.下載

      在"獲取"中我們已經獲取到了所有網頁內容的URL和圖片的URL,這里想要下載圖片,但它的格式通常是:“”所以這里只需要獲取src中的內容實現訪問該圖片,在調用文件相關知識實現簡單下載圖片.而獲取src中的值很顯然也是通過正則表達式獲取的.代碼如下:

      //點擊"下載"實現下載圖片 private void button3_Click(object sender, EventArgs e) { string imgsrc = string.Empty; //定義 //循環下載 for (int j = 0; j < num; j++) { string content = listBox2.Items[j].ToString(); //獲取圖片url Regex reg = new Regex(@" 0) { writer.Write(buff, 0, c); } //釋放資源 writer.Close(); writer.Dispose(); reader.Close(); reader.Dispose(); response.Close(); //下載成功 listBox2.Items.Add(path + ":圖片保存成功!"); } catch (Exception msg) { MessageBox.Show(msg.Message); } } } }

      該部分代碼可能存在幾個問題:

      (1).獲取圖片格式不一定是jpg格式,這里主要想展示一種思想,具體的不同圖片獲取設置一下即可;

      (2).采用該文件流的方法下載速度很慢,可以采用其他方法,WebClient.DownloadFile()等,因為我剛好研究了文件知識和網絡爬蟲,所以就采用了此基礎方法;

      (3).代碼中的兩層循環有點多余,但MatchCollection mc獲取的是匹配集合,總體感覺此段還是有點亂;

      (4).如果想批量下載圖片,最好使用上線程等知識,同時采用一些優秀的算法(強調是算法),內存中獲取,該程序只是基礎知識.

      三. 運行結果

      運行結果如下圖所示:點擊"瀏覽"按鈕可以實現瀏覽網頁,點擊"獲取"可以獲取網頁的URL并顯示在listBox控件中,最后點擊"下載"把圖片保存到E盤目錄下,下面就是瀏覽百度時下載的logo圖標.(如果圖片沒有源URL路徑,需要自己去實現,如)

      四. 網頁基礎知識

      這里主要介紹HTML網頁制作中的超鏈接和圖片鏈接的基礎知識,更好的方便大家理解這篇文章.(參考趙豐年的《網頁制作教程》)

      1.頁面鏈接

      網頁中創建超鏈接需要使用A標記符,結束標記符為.它的最基本屬性是href,用于指定超鏈接的目標,通過href屬性指定不同的值,可以創建不同類型的超鏈接.同時之間可以用單擊對象作為超鏈接的源(文字或圖片).

      如百度首頁中的:“新 聞”.(錨點連接這里就不介紹)

      2.插入圖片

      在HTML中使用IMG標記符向網頁中插入圖片,它的兩個必要基本屬性是src和alt.分別用于設置圖像文件的位置和替換文本.

      (1).src屬性表示要插入圖像的文件名,必須包含絕對路徑或相對路徑.

      (2).alt屬性表示圖像的簡單文本說明,用于不能顯示圖像的瀏覽器或顯示時間過長時先替換顯示.

      如百度首頁的logo圖標圖片“”當直接訪問該url時能訪問圖片,我們上面的程序主要就是通過這種方式下載網頁中的圖片的.如下圖:

      五. 正則表達式

      正則表達式(Regular Expression)就是一個字符構成的串,它定義了一個用來搜索匹配字符串的模式.許多語言包括Perl、PHP、Python、JavaScript和JScript,都支持用正則表達式處理文本,一些文本編輯器用正則表達式實現高級“搜索-替換”功能.我所接觸到的正則表達式一個是用戶名密碼設置和該網頁知識中,所以我也還需要去學習該部分知識.這里主要用到3個正則表達式,其中下面兩個代碼非常有用:

      1.獲取HTML中所有圖片的URL

      ///

      /// 取得HTML中所有圖片的 URL /// /// HTML代碼 /// 圖片的URL列表 public static string[] GetHtmlImageUrlList(string sHtmlText) { // 定義正則表達式用來匹配 img 標簽 Regex regImg = new Regex(@"]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*(?[^\s\t\r\n""'<>]*)[^<>]*?/?[\s\t\r\n]*>", RegexOptions.IgnoreCase); // 搜索匹配的字符串 MatchCollection matches = regImg.Matches(sHtmlText); int i = 0; string[] sUrlList = new string[matches.Count]; // 取得匹配項列表 foreach (Match match in matches) { sUrlList[i++] = match.Groups["imgUrl"].Value; } return sUrlList; }

      2.獲得圖片的src路徑并保存

      ///

      /// 獲得圖片的路徑并存放 /// /// 要檢索的內容 /// IList public static IList GetPicPath(string M_Content) { IList im = new List();//定義一個泛型字符類 Regex reg = new Regex(@"[^""]*)""[^>]*>", RegexOptions.IgnoreCase); MatchCollection mc = reg.Matches(M_Content); //設定要查找的字符串 foreach (Match m in mc) { im.Add(m.Groups["src"].Value); } return im; }

      六. 總結

      該文章主要是做C#網絡知識中關于網絡爬蟲獲取URL和簡單下載圖片的基礎講解,很清晰的講述了首先要獲取URL就需要瀏覽網頁,至少要獲取網頁HTML內容,在通過簡單的正則表達式獲取內容;如果要下載圖片就要獲取圖片的URL獲取src的網址,在下載該網址中的圖片,獲取方法還是使用正則表達式,下載方法可以使用很多,這里采用的是文件流,最好使用多線程等批量下載手段.

      主要通過該文件介紹一些基本的網絡知識,同時我也在不斷的學習研究,同時講解正則表達式和網頁基本的兩個概念知識.最后感謝文章中那個網址的博主及一些人,希望該文章能夠對大家有所幫助,同時如果文章中有錯誤或不足之處,還請大家海涵.

      (By:娜璋之家 Eastmount 2021-10-25 夜于武漢)

      C# 網絡

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:天畫-codeMaker低代碼平臺設計與實現(上)
      下一篇:創建Word 2013組件的桌面啟動快捷方式的方法(創建word賬戶的電子郵件地址怎么寫)
      相關文章
      中文字幕乱码亚洲精品一区| 国产日本亚洲一区二区三区| 亚洲人成色99999在线观看| 久久精品亚洲精品国产色婷| 日本亚洲成高清一区二区三区 | 亚洲男人的天堂久久精品| 亚洲美女一区二区三区| 亚洲精品动漫在线| 亚洲成综合人影院在院播放| 亚洲天堂一区二区三区| 亚洲午夜国产精品无卡| 亚洲人成7777影视在线观看| 亚洲一卡2卡3卡4卡国产网站| 亚洲va成无码人在线观看| 亚洲香蕉久久一区二区三区四区| 久久精品国产99国产精品亚洲| 亚洲最大成人网色香蕉| 国产亚洲精品成人AA片| 亚洲变态另类一区二区三区 | 人人狠狠综合久久亚洲88| 亚洲嫩草影院久久精品| 亚洲的天堂av无码| 亚洲人成综合网站7777香蕉| 亚洲色无码国产精品网站可下载| 亚洲AV永久无码精品一福利| 国产精品自拍亚洲| 久久夜色精品国产亚洲av| 久久亚洲国产午夜精品理论片| 亚洲AV乱码一区二区三区林ゆな| 亚洲天天在线日亚洲洲精| 亚洲熟妇色自偷自拍另类| 亚洲乱码一区二区三区国产精品| 亚洲国产无线乱码在线观看| mm1313亚洲国产精品无码试看| 亚洲精品在线视频| 亚洲AV无码乱码在线观看裸奔 | 亚洲精品影院久久久久久| 亚洲一区二区三区精品视频| 亚洲欧美日韩中文二区| 亚洲成a人片在线观看日本麻豆| 久久久久亚洲爆乳少妇无 |