C# 網絡編程之webBrowser獲取網頁url和下載網頁中圖片
該文章主要是通過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]*(?
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(@"
該部分代碼可能存在幾個問題:
(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
/// ]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*(?
2.獲得圖片的src路徑并保存
///
六. 總結
該文章主要是做C#網絡知識中關于網絡爬蟲獲取URL和簡單下載圖片的基礎講解,很清晰的講述了首先要獲取URL就需要瀏覽網頁,至少要獲取網頁HTML內容,在通過簡單的正則表達式獲取內容;如果要下載圖片就要獲取圖片的URL獲取src的網址,在下載該網址中的圖片,獲取方法還是使用正則表達式,下載方法可以使用很多,這里采用的是文件流,最好使用多線程等批量下載手段.
主要通過該文件介紹一些基本的網絡知識,同時我也在不斷的學習研究,同時講解正則表達式和網頁基本的兩個概念知識.最后感謝文章中那個網址的博主及一些人,希望該文章能夠對大家有所幫助,同時如果文章中有錯誤或不足之處,還請大家海涵.
(By:娜璋之家 Eastmount 2021-10-25 夜于武漢)
C# 網絡
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。