范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

c与vb。net两套代码手把手教你写。net网页爬虫

  爬虫作为时下最热门的一项话题。
  在爬虫技术上,python占据了大半壁江山。那.Net家族是否也能实现爬虫呢?答案是肯定的。
  c# 可能还算比较热门,但vb.net在国内的饭碗全被c# 抢走了。但是就7月的编程排行榜来看,世界排名还不差,仅比c# 低了0.3%,遥遥领先JS和PHP。
  接下来,我们重拾.Net家族的两位元老:c#与vb.net,手把手教你写第一个出色的爬虫!这篇文章适合有一定基础掌,握基本语法的朋友参考。我在此抛砖引玉。
  网页爬虫
  何为爬虫?简单地说就是一种抓取某个网页HTML代码的一项技术。通常用于数据接口交互、采集信息等。获取网页源码只是第一步,还要从获取的数据中提取到有用的数据,比如网页标题、网页内容、图片等。
  总结一下,其实爬虫部分就只有两个步骤:获取网页源代码>分析并取得有用数据
  下面介绍三种不同的爬取方式,分别适用于不同场景。正常爬取网页源代码
  大部分浏览器在打开某个网页后,右键都有"查看源代码"这一项。在这一大串的HTML代码里面,可以看到网页上显示的网页标题、内容数据、图片内容等等。
  当我们需要批量采集某个网站多个网址的内容时,一个一个页面右键查看源代码,手动的复制需要的内容保存,这未免太强人所难。这时候我们需要爬虫批量为我们爬取数据。
  那获取网址的源代码就是第一步。
  在Net下,有多种方式来获取网页源码。都是通过模拟发送http协议来实现的。
  一般情况下,可以使用NET及系统自带的HttpXML对象、WebClient对象和HttpWebRequest对象来实现。当然,有能力的可以采用纯Socket来实现。
  这里推荐采用HttpWebRequest方式。
  以下是c#代码HttpWebRequest方式获取源代码的函数:public string GetHtmlStr(string url)         {             try             {                 Uri uri = new Uri(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 = new StreamReader(s, System.Text.Encoding.GetEncoding("utf-8"));                 string html = sr.ReadToEnd();                 s.Close();                 response.Close();                 return html;             }             catch (Exception ex)             {                 return "/error/";             }         }
  以及咱说好的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 response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)         Dim s As Stream = response.GetResponseStream()         Dim sr As StreamReader = New StreamReader(s, System.Text.Encoding.GetEncoding("utf-8"))         Dim html As String = sr.ReadToEnd()         s.Close()         response.Close()         Return html       Catch ex As Exception         Return "/error/"       End Try End Function
  这个获取网页源码的函数以及封装好,调用非常简单:GetHtmlStr("网址")
  如果发生错误,返回字符串/error/。这里,特别注意代码中的utf-8编码。编码错误会造成获取到乱码,还有命名空间的引用。
  不少同学可能会发现,以上的代码并不支持https网址,不过不用担心,稍作改动即可支持。Imports System.Net.Security Imports System.Security.Authentication Imports System.Security.Cryptography.X509Certificates Public Function CheckValidationResult(ByVal sender As Object, ByVal certificate As X509Certificate, ByVal chain As X509Chain, ByVal errors As SslPolicyErrors) As Boolean Return True End Function
  并在以上的GetHTMLStr函数中HttpWebRequest = xxx 添加以下代码即可ServicePointManager.ServerCertificateValidationCallback = New System.Net.Security.RemoteCertificateValidationCallback(AddressOf CheckValidationResult)
  改造完成后,所有https的网址均能正常获取,哪怕https的ssl证书出现问题(过期、不信任)都可以正常获取,不受影响。
  简单总结一下,以上介绍的爬取方式适合普通直接打开即可访问的http或https网址。 附带Cookie方式GET和POST爬取
  以上介绍的是获取网页的源码,功能比较简单。下面介绍附带Cookie的GET方式和POST方式获得源码。附带Cookie实现POST和GET,可以爬取更深一层的信息。一些需要账号登录后才能显示的网址均可以正常爬取 。
  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 response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)          Dim s As Stream = response.GetResponseStream()          Dim sr As StreamReader = New StreamReader(s, System.Text.Encoding.GetEncoding("utf-8"))          Dim html As String = sr.ReadToEnd()          s.Close()          response.Close()          Return html      Catch ex As Exception          Return "/error/"      End Try End Function
  c#代码:public string GetHtmlStr(string url, string cookies) {     try     {         CookieContainer ck = new CookieContainer();         ck.SetCookies(new Uri(url), cookies);         Uri uri = new Uri(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 = new StreamReader(s, System.Text.Encoding.GetEncoding("utf-8"));         string html = sr.ReadToEnd();         s.Close();         response.Close();         return html;     }     catch (Exception ex)     {         return "/error/";     } }
  以上代码不难看出,其实就是在普通爬取版本上增加了cookie对象的引入。GetHtmlStr函数的Cookie参数格式为:cookie名=值,多个用逗号隔开,如:name=123,pass=123
  有了它,就可以实现爬取某些需要登录才能访问的网址。
  对了,还有post方法的vb.net版本:Private Function HttpPost(Url As String, postDataStr As String) As String         Dim request As HttpWebRequest = DirectCast(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 Safari/537.36"         request.ContentLength = Encoding.UTF8.GetByteCount(postDataStr)         Dim myRequestStream As Stream = request.GetRequestStream()         Dim myStreamWriter As New StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312"))         myStreamWriter.Write(postDataStr)         myStreamWriter.Close()         Dim response As HttpWebResponse = DirectCast(request.GetResponse(), HttpWebResponse)         Dim myResponseStream As Stream = response.GetResponseStream()         Dim myStreamReader As New StreamReader(myResponseStream, Encoding.GetEncoding("gb2312"))         Dim retString As String = myStreamReader.ReadToEnd()         myStreamReader.Close()         myResponseStream.Close()         Return retString     End Function
  c#版本:private string HttpPost(string Url, string postDataStr) { 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 = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312")); myStreamWriter.Write(postDataStr); myStreamWriter.Close(); HttpWebResponse response; request.GetResponse(); HttpWebResponse; Stream myResponseStream = response.GetResponseStream(); StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("gb2312")); string retString = myStreamReader.ReadToEnd(); myStreamReader.Close(); myResponseStream.Close(); return retString; }
  留个小作业,这里的HttpPost函数cookie参数部分,可以参考上面的带cookie的Get方案自行添加。浏览器爬取
  有一些网页,前端显示的内容是由后端JS动态生成,以上两种获取网页的方式都无法正常获取。那难道真的就没有任何办法了吗?不见得。我们还可以利用Net自带的IE控件webBrowser解释网页JS后再获取!
  添加一个WebBrowser浏览器控件,下面代码可以操作一个WebBrowser控件打开一个网址,并等待其加载完成(等待JS将内容解释完毕)。Public Sub WebBrowserOpenURL(W As WebBrowser, S As String)         Try             W.Navigate(S)             While (W.ReadyState <> WebBrowserReadyState.Complete)                 Application.DoEvents()             End While         Catch ex As Exception         End Try     End Subpublic void WebBrowserOpenURL(WebBrowser W, string S) {     try     {         W.Navigate(S);         while ((W.ReadyState != WebBrowserReadyState.Complete))             Application.DoEvents();     }     catch (Exception ex)     {     } }
  等到此自定义过程结束时,再通过webBrowser1.DocumentText方法获取控件中显示的所有内容。
  当然,如果条件允许,可以使用chromium来获得更好的兼容性和性能。其他
  以上三种不同的源码爬取方式适合不同的场景。但是要分别注意以下三点:
  1)浏览器UA,即浏览器标识。一些网页需要移动端才能正常显示。
  2)网页编码。编码设置错误会造成返回乱码。
  3)请遵守网站使用条款和相关法规,勿胡乱爬取。
  以上代码支持Winform以及web后端编程。
  本次限于篇幅,就简单介绍到这。下一期将介绍如何从爬取的HTML代码中分析并获取想要的数据。

iQOO2周年庆酷客嘉年华,与产品经理面对面iQOO在751动力广场举办了品牌2周年酷客嘉年华。作为品牌2周年庆的终极大趴,现场融合了视觉享受感官碰撞时尚潮流影音科技等丰富元素,同时设置了产品体验区游戏互动区礼品兑换区酷客群上海九号见面会现场我一个不骑车的人,竟然想试试九号电动车九号电动车其实更像是机器人外面套上了电动车的壳子,这是我今天印象最深的一句话。九号其实并不仅仅只是电动车,它在机器人人工智能等方面都有自己的技术,比如九号方糖机器人,它已经在酒店为vivoTWS2搭载智能动态降噪技术,这是2021年旗舰降噪的标准随着5月20号发布会的即将到来,关于vivo新品TWS2真无线降噪耳机的消息不断曝光,可以肯定的是,vivoTWS2在音质上继续延续好声音的理念,搭载的12。2mm超大单元Deep与活力共舞,iQOONeo5像素橙开箱图赏iQOONeo5除了夜影黑与云影蓝这两种经典配色之外,还有一款很活力的像素橙配色,今天终于到了,小阿皂随手拍几张图赏吧。像素橙这个配色其实让我想到了之前iQOO3上的拉力橙,它们看一加9R正式发布这一刻你我都变成了光10秒销售额破3亿5分钟破5亿。从官方和电商平台的数据来看,一加9系列整体销量确实不错,这让张老板更有底气了。一加9系列的代言人是胡歌和周迅,这次一加9R代言人是由光之巨人迪迦代言realme真我Q3Pro首发评测我要成为夜光下最靓的仔realme真我Q系列在去年销量不错,而Q系列的使命主要就是在同价位的千元机型中完成敢越级的任务,从结果来看,Q2系列完成了。这次realme真我顺势带来了realme真我Q3PrvivoTWS2体验评测弯道超车?还是自动档的各家真无线蓝牙在前两年算是完成的基础布局,想做真无线的都已经开始做了,没做的之后可能也不会做所以到现在你会发现有特别多厂商陆续推出新款TWS耳机,而vivo算是一个让我特别期待的厂次旗舰能和旗舰机掰头吗?一加9R上手评测看了一下我上次用一加手机,emm还是2019年的一加7Pro,当时它的高刷和真全面屏真的是很出色。时隔多年,我再次上手体验了一加手机,这次是一加9R。一加张老板曾经说过,一加只做精小米降噪耳机Pro体验摊牌了,这才是小米冲刺高端TWS之作去年小米Air2Pro在几次更新后加入了抗风噪模式,同时降噪音质表现也得以改善,后来网友表示佩戴容易掉的问题,小米也通过补发耳塞得以解决。我还没有上耳体验小米降噪耳机Pro之前,一上海大悦城小米快闪店与米粉一起抢先体验小米11Ultra前几天小米在北京正式发布小米11Pro小米11Ultra小米11青春版以及小米MIXFOLD,这四款手机可以说是本次小米春季新品发布会的重点产品,肯定很多米粉对这四款手机早已垂涎三用天玑1200打造双平台旗舰,真我GTNeo正式发布2021年3月31日中国北京全球成长最快的智能手机品牌realme真我于今日在北京举办真我GTNeo新品发布会。作为一款潮玩性能旗舰,真我GTNeo不仅在越级性能和潮玩设计方面再次
征服欧美的比亚迪电动大巴有多牛?它到底好在哪里?你敢信吗?在你眼里的垃圾比亚迪,却是海外的香饽饽。今天不聊比亚迪超级混动DMI,也不聊BYD的造芯实力。本期专门说一下,比亚迪的电动大巴有多牛?它有什么资本可以向世界工业强国输出价抖音还能做几年?随着短视频的快速发展,抖音成为许多人使用的一款APP。目前,很多人仍想入局抖音,可是抖音在未来还有哪些商业空间可以继续拓展呢?本文作者从三个方面回答了这个问题,一起来看看吧。各位村走进博鳌2022中国智能手机以合作迎接美好未来文观察者网周昊上世纪末,一场席卷东南亚地区的金融危机让飞速发展了三十年的亚洲各国深刻意识到,在经济全球化和区域化不断发展的进程中,亚洲国家在进一步加强与世界其他地区联系与合作的同时为什么手机店一周卖不了5部手机,却依然活得很滋润?靠什么挣钱近年来,网上购物开始蓬勃发展,各种电商企业赚的盆满盈钵。随着网购手机的质量和售后保障逐渐完善,越来越多的人选择在网上买手机。这样一来,实体手机店受到了不小的冲击。然而走在大街上你会又是一个没有休息的双休日!移动电信和联通的内卷何时休?之前,通信老牛和某运营商的朋友聊天。他负责某县的市场销售工作。他说又是一个没有休息的双休日。他很疲倦也很无奈,但没有抱怨,也许是习惯了但通信老牛却感触颇深三大运营商内卷严重!事情的受益于新能源汽车行业高速增长英博尔2021年净利润同比增长256。01中证网讯(王珞)英博尔(300681)4月22日晚间披露2021年度报告,报告期内,公司实现营业收入9。76亿元,同比增长131。8,实现归属于上市公司股东的净利润4684。07万来吧,来占领这里吧!科学家将向宇宙广播地球坐标银河信标。ESOJosFranciscoSalgado一些来自世界各国的科学家近日正在研究使用新技术向宇宙中可能存在的地外文明广播地球坐标。他们称这种广播为银河信标(Beaconi小米汽车工厂建设如火如荼能否打入市场备受考验入局较晚的小米汽车能否真正杀入中国新能源汽车市场站稳脚跟,还是未知数。(香港中通社)小米公司董事长雷军去年表态,造车是他最后一次重大创业,如今工厂开工建设,是小米汽车落地的关键一步乌克兰官员称中国无人机不安全,美企钻空子发战争财(观察者网讯)中企大疆被卷入俄乌冲突,美国企业趁机钻空子,想发一笔战争财。据美国华尔街日报4月22日报道,数百架来自美国初创公司的小型无人机近期盘旋在乌克兰上空。包括西雅图BRIN中芯物联物联网的基本特征以及应用过程中的五大领域物联网发展至今,已经融入到我们生活中各个方面,中芯物联科技(广州)有限公司作为NFC标签智能化包装,带大家谈谈物联网中的那些正在发生或者已经发生的事!物联网的特征一是综合识别感知,小鹏汽车为例,聊一聊汽车OTA在实现汽车新功能的路上有一个重要的节点叫OTA,即OvertheAirTechnology(空中下载技术),它需要技术服务运营三方面的内容才能运营好。本篇文章里,作者以小鹏汽车为例