久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx

c#與vb.net兩套代碼手把手教你寫(xiě).net網(wǎng)頁(yè)爬蟲(chóng)

2024-04-12    分類: 網(wǎng)站建設(shè)

爬蟲(chóng)作為時(shí)下最熱門的一項(xiàng)話題。

在爬蟲(chóng)技術(shù)上,python占據(jù)了大半壁江山。那.Net家族是否也能實(shí)現(xiàn)爬蟲(chóng)呢?答案是肯定的。

c 可能還算比較熱門,但vb.net在國(guó)內(nèi)的飯碗全被c 搶走了。但是就7月的編程排行榜來(lái)看,世界排名還不差,僅比c 低了0.3%,遙遙領(lǐng)先JS和PHP。

接下來(lái),我們重拾.Net家族的兩位元老:c與vb.net,手把手教你寫(xiě)第一個(gè)出色的爬蟲(chóng)!這篇文章適合有一定基礎(chǔ)掌,握基本語(yǔ)法的朋友參考。我在此拋磚引玉。

網(wǎng)頁(yè)爬蟲(chóng)

何為爬蟲(chóng)?簡(jiǎn)單地說(shuō)就是一種抓取某個(gè)網(wǎng)頁(yè)HTML代碼的一項(xiàng)技術(shù)。通常用于數(shù)據(jù)接口交互、采集信息等。獲取網(wǎng)頁(yè)源碼只是第一步,還要從獲取的數(shù)據(jù)中提取到有用的數(shù)據(jù),比如網(wǎng)頁(yè)標(biāo)題、網(wǎng)頁(yè)內(nèi)容、圖片等。

總結(jié)一下,其實(shí)爬蟲(chóng)部分就只有兩個(gè)步驟:獲取網(wǎng)頁(yè)源代碼>分析并取得有用數(shù)據(jù)

下面介紹三種不同的爬取方式,分別適用于不同場(chǎng)景。

正常爬取網(wǎng)頁(yè)源代碼

大部分瀏覽器在打開(kāi)某個(gè)網(wǎng)頁(yè)后,右鍵都有查看源代碼這一項(xiàng)。在這一大串的HTML代碼里面,可以看到網(wǎng)頁(yè)上顯示的網(wǎng)頁(yè)標(biāo)題、內(nèi)容數(shù)據(jù)、圖片內(nèi)容等等。

在Net下,有多種方式來(lái)獲取網(wǎng)頁(yè)源碼。都是通過(guò)模擬發(fā)送http協(xié)議來(lái)實(shí)現(xiàn)的。

一般情況下,可以使用NET及系統(tǒng)自帶的HttpXML對(duì)象、WebClient對(duì)象和HttpWebRequest對(duì)象來(lái)實(shí)現(xiàn)。當(dāng)然,有能力的可以采用純Socket來(lái)實(shí)現(xiàn)。

這里推薦采用HttpWebRequest方式。

以下是c代碼HttpWebRequest方式獲取源代碼的函數(shù):

publicstringGetHtmlStr(stringurl){try{ Uri uri =newUri(url); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); request.UserAgent ="User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705"; request.Accept ="*/*"; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream s = response.GetResponseStream(); StreamReader sr =newStreamReader(s, System.Text.Encoding.GetEncoding("utf-8"));stringhtml = sr.ReadToEnd(); s.Close(); response.Close();returnhtml; }catch(Exception ex) {return"/error/"; } }

以及咱說(shuō)好的vb.net代碼

Public Function GetHtmlStr(ByVal url As String) As String Try Dim uri As Uri = New Uri(url) Dim request As HttpWebRequest = CType(WebRequest.Create(uri), HttpWebRequest) request.UserAgent ="User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705"request.Accept ="*/*"Dim responseAsHttpWebResponse = CType(request.GetResponse(), HttpWebResponse) Dim sAsStream = response.GetResponseStream() Dim srAsStreamReader =NewStreamReader(s, System.Text.Encoding.GetEncoding("utf-8")) Dim htmlAsString= sr.ReadToEnd() s.Close() response.Close()Returnhtml Catch exAsExceptionReturn"/error/"EndTryEndFunction

這個(gè)獲取網(wǎng)頁(yè)源碼的函數(shù)以及封裝好,調(diào)用非常簡(jiǎn)單:

GetHtmlStr("網(wǎng)址")

如果發(fā)生錯(cuò)誤,返回字符串/error/。這里,特別注意代碼中的utf-8編碼。編碼錯(cuò)誤會(huì)造成獲取到亂碼,還有命名空間的引用。

ImportsSystem.Net.SecurityImportsSystem.Security.AuthenticationImportsSystem.Security.Cryptography.X509CertificatesPublicFunctionCheckValidationResult(ByValsenderAsObject,ByValcertificateAsX509Certificate,ByValchainAsX509Chain,ByValerrorsAsSslPolicyErrors)AsBooleanReturnTrueEndFunction

并在以上的GetHTMLStr函數(shù)中HttpWebRequest = xxx 添加以下代碼即可

ServicePointManager.ServerCertificateValidationCallback= New System.Net.Security.RemoteCertificateValidationCallback(AddressOf CheckValidationResult)附帶Cookie方式GET和POST爬取

vb.net代碼:

Public Function GetHtmlStr(ByVal url As String, cookies As String) As String Try Dim ck As New CookieContainer ck.SetCookies(New Uri(url), cookies) Dim uri As Uri = New Uri(url) Dim request As HttpWebRequest = CType(WebRequest.Create(uri), HttpWebRequest) request.UserAgent ="User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705"request.Accept ="*/*"request.CookieContainer = ck Dim responseAsHttpWebResponse = CType(request.GetResponse(), HttpWebResponse) Dim sAsStream = response.GetResponseStream() Dim srAsStreamReader =NewStreamReader(s, System.Text.Encoding.GetEncoding("utf-8")) Dim htmlAsString= sr.ReadToEnd() s.Close() response.Close()Returnhtml Catch exAsExceptionReturn"/error/"EndTryEndFunction

c代碼:

publicstringGetHtmlStr(stringurl,stringcookies){try{ CookieContainer ck =newCookieContainer(); ck.SetCookies(newUri(url), cookies); Uri uri =newUri(url); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); request.UserAgent ="User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705"; request.Accept ="*/*"; request.CookieContainer = ck; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream s = response.GetResponseStream(); StreamReader sr =newStreamReader(s, System.Text.Encoding.GetEncoding("utf-8"));stringhtml = sr.ReadToEnd(); s.Close(); response.Close();returnhtml; }catch(Exception ex) {return"/error/"; }}

以上代碼不難看出,其實(shí)就是在普通爬取版本上增加了cookie對(duì)象的引入。GetHtmlStr函數(shù)的Cookie參數(shù)格式為:cookie名=值,多個(gè)用逗號(hào)隔開(kāi),如:name=123,pass=123

對(duì)了,還有post方法的vb.net版本:

PrivateFunctionHttpPost(Url As String, postDataStr As String)AsStringDimrequestAsHttpWebRequest=DirectCast(WebRequest.Create(Url), HttpWebRequest)request.Method= "POST"request.ContentType= "application/x-www-form-urlencoded"request.UserAgent= "Mozilla/5.0(Windows NT10.0; WOW64)AppleWebKit/537.36(KHTML, like Gecko)Chrome/59.0.3071.115Safari/537.36"request.ContentLength=Encoding.UTF8.GetByteCount(postDataStr)DimmyRequestStreamAsStream=request.GetRequestStream()DimmyStreamWriterAsNewStreamWriter(myRequestStream, Encoding.GetEncoding("gb2312"))myStreamWriter.Write(postDataStr)myStreamWriter.Close()DimresponseAsHttpWebResponse=DirectCast(request.GetResponse(), HttpWebResponse)DimmyResponseStreamAsStream=response.GetResponseStream()DimmyStreamReaderAsNewStreamReader(myResponseStream, Encoding.GetEncoding("gb2312"))DimretStringAsString=myStreamReader.ReadToEnd()myStreamReader.Close()myResponseStream.Close()ReturnretStringEndFunction

c版本:

privatestringHttpPost(stringUrl,stringpostDataStr){HttpWebRequest request;WebRequest.Create(Url);HttpWebRequest;request.Method ="POST";request.ContentType ="application/x-www-form-urlencoded";request.UserAgent ="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safa"+"ri/537.36";request.ContentLength = Encoding.UTF8.GetByteCount(postDataStr);Stream myRequestStream = request.GetRequestStream();StreamWriter myStreamWriter =newStreamWriter(myRequestStream, Encoding.GetEncoding("gb2312"));myStreamWriter.Write(postDataStr);myStreamWriter.Close();HttpWebResponse response;request.GetResponse();HttpWebResponse;Stream myResponseStream = response.GetResponseStream();StreamReader myStreamReader =newStreamReader(myResponseStream, Encoding.GetEncoding("gb2312"));stringretString = myStreamReader.ReadToEnd();myStreamReader.Close();myResponseStream.Close();returnretString;}

留個(gè)小作業(yè),這里的HttpPost函數(shù)cookie參數(shù)部分,可以參考上面的帶cookie的Get方案自行添加。

瀏覽器爬取

有一些網(wǎng)頁(yè),前端顯示的內(nèi)容是由后端JS動(dòng)態(tài)生成,以上兩種獲取網(wǎng)頁(yè)的方式都無(wú)法正常獲取。那難道真的就沒(méi)有任何辦法了嗎?不見(jiàn)得。我們還可以利用Net自帶的IE控件webBrowser解釋網(wǎng)頁(yè)JS后再獲??!

PublicSub WebBrowserOpenURL(WAsWebBrowser, SAsString)TryW.Navigate(S)While(W.ReadyState <> WebBrowserReadyState.Complete) Application.DoEvents() EndWhileCatchexAsExceptionEndTryEnd SubpublicvoidWebBrowserOpenURL(WebBrowser W,stringS){try{ W.Navigate(S);while((W.ReadyState != WebBrowserReadyState.Complete)) Application.DoEvents(); }catch(Exception ex) { }}

等到此自定義過(guò)程結(jié)束時(shí),再通過(guò)webBrowser1.DocumentText方法獲取控件中顯示的所有內(nèi)容。

當(dāng)然,如果條件允許,可以使用chromium來(lái)獲得更好的兼容性和性能。

其他

以上三種不同的源碼爬取方式適合不同的場(chǎng)景。但是要分別注意以下三點(diǎn):

1)瀏覽器UA,即瀏覽器標(biāo)識(shí)。一些網(wǎng)頁(yè)需要移動(dòng)端才能正常顯示。

2)網(wǎng)頁(yè)編碼。編碼設(shè)置錯(cuò)誤會(huì)造成返回亂碼。

3)請(qǐng)遵守網(wǎng)站使用條款和相關(guān)法規(guī),勿胡亂爬取。

以上代碼支持Winform以及web后端編程。

本次限于篇幅,就簡(jiǎn)單介紹到這。下一期將介紹如何從爬取的HTML代碼中分析并獲取想要的數(shù)據(jù)。

非常感謝您讀完創(chuàng)新互聯(lián)的這篇文章:"c#與vb.net兩套代碼手把手教你寫(xiě).net網(wǎng)頁(yè)爬蟲(chóng)",僅為提供更多信息供用戶參考使用或?yàn)閷W(xué)習(xí)交流的方便。我們公司提供:網(wǎng)站建設(shè)、網(wǎng)站制作、官網(wǎng)建設(shè)、SEO優(yōu)化、小程序制作等服務(wù),歡迎聯(lián)系我們提供您的需求。

網(wǎng)站題目:c#與vb.net兩套代碼手把手教你寫(xiě).net網(wǎng)頁(yè)爬蟲(chóng)
網(wǎng)站URL:http://www.js-pz168.com/news1/323401.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、網(wǎng)站導(dǎo)航標(biāo)簽優(yōu)化搜索引擎優(yōu)化、服務(wù)器托管、建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

微信小程序開(kāi)發(fā)
久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx
国产美女主播视频一区| 日本欧洲国产一区二区| 视频在线99re| 欧美老女人在线| 国产精品女同一区二区三区| 香蕉久久夜色精品国产使用方法| 国产精品一级二级三级| 国产女主播一区二区| 色综合久久久久| 久久久亚洲精品一区二区三区| 一区二区三区四区激情| 国产精品一品二品| 久久精品午夜一区二区福利| 精品视频免费在线| 国产精品不卡在线观看| 久久国产精品72免费观看| 国产精品一区二区你懂得| 日本大香伊一区二区三区| 欧美国产日韩在线观看| 捆绑调教美女网站视频一区| 国产精品免费在线播放| 欧美在线看片a免费观看| 国产日产欧产精品推荐色| 日本在线不卡一区| 国产精品乱码一区二区三区| 欧美日韩在线播放| 亚洲人被黑人高潮完整版| 国产成人在线电影| 日韩av电影免费播放| 精品精品欲导航| 日韩黄色免费电影| 国产精品有限公司| 欧美日韩一区 二区 三区 久久精品| 国产精品欧美一区二区三区| 色婷婷精品久久二区二区蜜臀av | 精品处破学生在线二十三| 亚洲综合免费观看高清在线观看| 高清视频一区二区| 亚洲一区二区免费视频软件合集| 久久品道一品道久久精品| 日韩综合小视频| 国产伦精品一区二区三区在线 | 欧美精品一区二区久久婷婷| 天堂久久久久va久久久久| 国产aⅴ精品一区二区三区黄| 欧美日韩成人综合在线一区二区| 一区二区三区美女视频| 91麻豆swag| 欧美日本韩国一区| 亚洲电影你懂得| 91精品入口蜜桃| 91精品国产入口| 天天综合色天天| 久久99久久精品国产| 久久综合一区二区| 国产一区二区在线观看视频| 亚洲欧美日韩不卡一区二区三区| 国产色综合久久| 成人午夜免费电影| 在线观看欧美日本| 亚洲国产美女搞黄色| 亚洲一区二区欧美激情| 91精品婷婷国产综合久久蝌蚪| 欧美日韩激情一区二区三区| 亚洲午夜一区二区三区| 国产日韩亚洲精品| 久久综合九色综合97婷婷女人| 激情丁香综合五月| 伊人久久99| 一区二区三区在线免费视频| 国产精品99久久久久久久 | 特级西西444www大精品视频| 中文欧美字幕免费| 99久久久免费精品国产一区二区| 欧美欧美欧美欧美首页| 强制捆绑调教一区二区| 午夜欧美一区二区三区免费观看| 亚洲欧美综合另类在线卡通| 91影院在线免费观看| 欧美变态tickling挠脚心| 国内外精品视频| 91黄色免费网站| 丝袜美腿成人在线| 亚洲不卡一卡2卡三卡4卡5卡精品| 亚洲婷婷在线视频| 国产精品一区视频| 中文字幕的久久| 99久久精品无码一区二区毛片 | 成人精品高清在线| 91精品国产综合久久精品图片| 美女尤物国产一区| 91官网在线观看| 日本不卡一区二区三区| 在线免费观看成人| 香港成人在线视频| 伊人色综合久久天天五月婷| 亚洲成a人v欧美综合天堂下载| 欧洲国产精品| 亚洲综合在线第一页| 欧洲亚洲一区| 一区二区三区精品久久久| 欧美在线激情| 亚洲一区二区三区在线播放| 欧美一区激情视频在线观看| 一二三区精品视频| 日韩欧美三级电影| 亚洲成人黄色小说| 在线一区高清| 麻豆精品久久精品色综合| 欧美性三三影院| 国产做a爰片久久毛片| 在线不卡a资源高清| 国产成人免费av在线| 欧美草草影院在线视频| 91在线观看下载| 国产日本欧美一区二区| 国产伦精品一区二区三区视频孕妇 | 精品国产乱码久久久久久蜜柚| 国产精品久久久久久久久久免费看 | 亚洲一区二区3| 神马影院一区二区| 日韩av高清在线观看| 欧美在线播放高清精品| 国产精品自拍网站| 精品第一国产综合精品aⅴ| 成人久久18免费网站漫画| ...xxx性欧美| 亚洲精品乱码久久久久久蜜桃91| 日韩av在线发布| 5858s免费视频成人| 国产精品二三区| 精品91免费| 亚洲精品视频一区二区| 亚洲精品日韩成人| 久久成人免费网站| 精品人在线二区三区| 国产精品成人一区二区三区| 亚洲精品国产精品乱码不99| 亚洲在线视频一区二区| 激情图片小说一区| 精品欧美乱码久久久久久1区2区| 国产精品久久久久久久天堂第1集 国产精品久久久久久久免费大片 国产精品久久久久久久久婷婷 | 欧美一区二区三区在线看| 99国产欧美久久久精品| 亚洲欧洲美洲综合色网| 亚洲精品免费在线看| 狠狠色狠狠色综合| 久久精品亚洲精品国产欧美kt∨| 精品无人区一区二区三区竹菊 | 美女免费视频一区二区| 日韩欧美高清一区| 国产精品有限公司| 无码av免费一区二区三区试看| 欧美日韩精品一区二区三区 | 精品人在线二区三区| 国产一区二区视频在线免费观看| 亚洲永久精品大片| 欧美日韩一区二区三区高清| 99久久国产免费看| 亚洲精品免费在线| 欧美日韩日日摸| 2019国产精品视频| 亚洲一区在线观看网站| 欧美精品一二三四| 999国产视频| 亚洲sss视频在线视频| 91精品国产入口| 精品无码久久久久久久动漫| 免费成人av在线播放| 久久亚洲春色中文字幕久久久| 奇米影视首页 狠狠色丁香婷婷久久综合 | 精品久久久久久久一区二区蜜臀| 97碰碰视频| 伊人性伊人情综合网| 欧美日韩在线播放三区| 99久久综合狠狠综合久久止| 亚洲va韩国va欧美va精品| 欧美一区二区三区小说| 国产偷国产偷亚洲高清97cao| 日韩av电影天堂| 久久久三级国产网站| 亚洲激情图片| 成人av资源下载| 亚洲综合久久久久| 日韩视频免费观看高清完整版| 精品国产乱码久久久久| 韩国成人精品a∨在线观看| 国产精品久久久久久久久搜平片 | 日韩视频一区二区三区在线播放 | 粗大黑人巨茎大战欧美成人| 亚洲人成伊人成综合网小说| 欧美日韩国产在线播放网站| 国产综合第一页| 精品一区二区三区在线观看国产| 亚洲国产精品黑人久久久| 在线观看网站黄不卡| 国产精品一区二区三区在线| 激情都市一区二区| 亚洲精品视频一区二区| 日韩精品最新网址|