背景

最近NBA总决赛吸引了不少球迷,但是因为时差的关系,人家在比赛,我们在上班,有时候上班又不好意思光明正大的看比赛,那有什么办法 可以光明正大的看又不被发现呢。

有,自己动手丰衣足食,ChromeDriver+HtmlAgilityPack爬取比赛实时比分。

概述

WebDriver 就是对浏览器提供的原生API进行封装,使其成为一套更加面向对象的Selenium WebDriver API。使用这套API可以操控浏览器的开启、关闭,打开网页,操作界面元素,控制Cookie,还可以操作浏览器截屏、安装插件、设置代理、配置证书等。

HtmlAgilityPack是.net下的一个HTML解析类库。支持用XPath来解析HTML。这个意义不小,为什么呢?因为对于页面上的元素的xpath某些强大的浏览器能够直接获取得到,并不需要手动写。节约了大半写正则表达式的时间,当然正则表达式有时候在进一步获取的时候还需要写,但是通过xpath解析之后,正则表达式已经要匹配的范围已经非常小了。而且,不用正则表达式在整个页面源代码上匹配,速度也会有提升。总而言之,通过该类库,先通过浏览器获取到xpath获取到节点内容然后再通过正则表达式匹配到所需要的内容,无论是开发速度,还是运行效率都有提升。

代码实现

下面我们来看下如何使用ChromeDriver+HtmlAgilityPack爬取比赛实时比分。

抓取网页

//apistring url = "https://sports.qq.com/kbsweb/game.htm?mid=" + model.TxMatchId;//   string url = "https://kbs.sports.qq.com/kbsweb/game.htm?mid=100000:55370464";//  MatchUpdate model = new MatchUpdate();var cds = ChromeDriverService.CreateDefaultService();//是否应隐藏服务的命令提示符窗口cds.HideCommandPromptWindow = true;ChromeOptions options = new ChromeOptions();options.AddArguments("--test-type", "--ignore-certificate-errors");//   options.AddArguments("user-agent=mozilla/5.0 (linux; u; android 2.3.3; en-us; sdk build/ gri34) applewebkit/533.1 (khtml, like gecko) version/4.0 mobile safari/533.1");options.AddArgument("enable-automation");//  options.setBinary("C:/Program Files (x86)/Google/Chrome/chrome.exe");var r = ZhimaHttpProxy.GetProxy(false);if (r != null){Console.WriteLine(r.Address.Host);Console.WriteLine(r.Address.Port);string proxy_Host = r.Address.Host;int proxy_Post = r.Address.Port;string Ex_Proxy_Name = "proxy.zip";options.Proxy = null;options.AddArguments("--proxy-server=" + proxy_Host + ":" + proxy_Post.ToString());options.AddExtension(Ex_Proxy_Name);}if (IsHideMode)options.AddArgument("headless");string dic = System.Environment.CurrentDirectory + "\\cos";if (IsHideMode){using (IWebDriver driver = new OpenQA.Selenium.Chrome.ChromeDriver(cds, options, TimeSpan.FromSeconds(120))){Excule(driver, url, model);}}else{using (IWebDriver driver = new OpenQA.Selenium.Chrome.ChromeDriver(dic, options, TimeSpan.FromSeconds(120))){Excule(driver, url, model);}}

解析网页

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();doc.LoadHtml(Helper.ReadTxt(System.Environment.CurrentDirectory + "\\PageSource\\" + info.TxMatchId.Replace(":", "_") + ".txt"));int? HomeTeamScore = null;int? GuestTeamScore = null;List<MatchScore> MatchScoreList = new List<MatchScore>();HtmlNode titleNodes = doc.DocumentNode.SelectSingleNode("//div[@class='inner']");var titleNodes2 = doc.DocumentNode.SelectSingleNode("//div[@class='content-wrapper']");if (titleNodes2 != null)//  if (false){Console.WriteLine(titleNodes2.InnerText);var host = titleNodes2.SelectSingleNode("//div[@class='team-goal host']");var arr = host.InnerText.Replace("\r\n", "|");var arrs = arr.Split('|');arrs = arrs.Where(o => !string.IsNullOrWhiteSpace(o)).Select(o => o.Split('(')[0].Trim()).ToArray();HomeTeamScore = int.Parse(arrs[1]);MatchScoreList.Add(new MatchScore() { TeamName = arrs[0], TeamScore = HomeTeamScore });var guest = titleNodes2.SelectSingleNode("//div[@class='team-goal guest']");var arr2 = guest.InnerText.Replace("\r\n", "|");var arrs2 = arr2.Split('|');arrs2 = arrs2.Where(o => !string.IsNullOrWhiteSpace(o)).Select(o => o.Split('(')[0].Trim()).ToArray();GuestTeamScore = int.Parse(arrs2[1]);MatchScoreList.Add(new MatchScore() { TeamName = arrs2[0], TeamScore = GuestTeamScore });}else{var a = titleNodes.SelectNodes("//a[@data-target='teamName']");var score = titleNodes.SelectNodes("//span[@class='score']");if (score != null){int i = 0;foreach (var item in score){SetText("\r\n" + item.InnerText?.Trim());if (i == 0){HomeTeamScore = Convert.ToInt32(item.InnerText?.Trim());}if (i == 1){GuestTeamScore = Convert.ToInt32(item.InnerText?.Trim());}i++;}}if (a != null){int i = 0;foreach (var item in a){SetText("\r\n" + item.InnerText?.Trim());if (i == 0){MatchScoreList.Add(new MatchScore() { TeamName = item.InnerText?.Split('(')[0].Trim(), TeamScore = HomeTeamScore });}if (i == 1){MatchScoreList.Add(new MatchScore() { TeamName = item.InnerText?.Split('(')[0].Trim(), TeamScore = GuestTeamScore });}i++;}}}string statusstr = "";var t = titleNodes.SelectSingleNode("//div[@class='datetime-live-desc']");SetText("\r\n" + t.InnerText?.Trim());statusstr = t.InnerText?.Trim();var Status = info.Status;if (!string.IsNullOrWhiteSpace(statusstr) && statusstr.Contains("已结束")){Status = MatchStatus.End;}

最后再搞个小弹框,把数据输出即可。

c# 爬虫 -ChromeDriver+HtmlAgilityPack爬取比赛实时比分相关推荐

  1. 微博爬取显示全文_Python爬虫---chrome driver爬取微博(教你几十行代码爬取财宝宝微博长文)...

    0.学习路径示意图 各位小伙伴大家好,这次博主分享的是利用虚拟浏览器ChromeDriver去爬取微博大V--财宝宝的微博长文. 1.ChromeDriver简介 WebDriver是一个开源工具,用 ...

  2. Python爬虫与信息提取(五)爬虫实例:爬取新浪微博热搜排名

    经过一段时间的Python网络爬虫学习,今天自己摸索制作了一个能够爬取新浪微博实时热搜排名的小爬虫 1.效果: 2.制作过程中遇到的问题: (1)一开始研究微博热搜页面的源代码时忽略了<tbod ...

  3. python爬虫——使用selenium爬取微博数据(一)

    python爬虫--使用selenium爬取微博数据(二) 写在前面 之前因为在组里做和nlp相关的项目,需要自己构建数据集,采用selenium爬取了几十万条微博数据,学习了很多,想在这里分享一下如 ...

  4. Python爬虫入门 | 5 爬取小猪短租租房信息

    小猪短租是一个租房网站,上面有很多优质的民宿出租信息,下面我们以成都地区的租房信息为例,来尝试爬取这些数据. 小猪短租(成都)页面:http://cd.xiaozhu.com/   1.爬取租房标题 ...

  5. Python爬虫入门 | 4 爬取豆瓣TOP250图书信息

      先来看看页面长啥样的:https://book.douban.com/top250   我们将要爬取哪些信息:书名.链接.评分.一句话评价--   1. 爬取单个信息 我们先来尝试爬取书名,利用之 ...

  6. Python爬虫学习之爬取淘宝搜索图片

    Python爬虫学习之爬取淘宝搜索图片 准备工作 因为淘宝的反爬机制导致Scrapy不能使用,所以我这里是使用selenium来获取网页信息,并且通过lxml框架来提取信息. selenium.lxm ...

  7. 【k哥爬虫普法】爬取数据是否一定构成不正当竞争?

    我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识, ...

  8. monthy python爬虫_Python爬虫DOTA排行榜爬取实例(分享)

    Python爬虫DOTA排行榜爬取实例(分享) 1.分析网站 打开开发者工具,我们观察到排行榜的数据并没有在doc里 doc文档 在Javascript里我么可以看到下面代码: ajax的post方法 ...

  9. python3爬虫模拟登录爬取教务系统成绩单(获取cookie操作)

    前言 今天来写写爬取教务系统的爬虫,此次的爬虫目的是爬取教务系统里面的成绩单,涉及到的库依旧是selenium,re,beautifulsoup,Options,今天多了个csv库用来处理爬取的数据, ...

最新文章

  1. linux字符处理工具 新手教程
  2. springboot思维导图
  3. java8 例外网站_Java8兰巴达斯和例外
  4. P4897 【模板】最小割树(Gomory-Hu Tree)(网络流/最小割/树形结构)
  5. 计算机网络管理员demo,计算机网络试题demo
  6. ARM、X86/Atom、MIPS、PowerPC 介绍
  7. 抖音回应“天价烤虾”事件:已经在调查违规广告主
  8. 微课|中学生可以这样学Python(2.3.3节):reduce()函数
  9. 安装Oracle问题总结
  10. 安居客 Android 项目架构演进
  11. 读书印记 - 《人类的群星闪耀时》
  12. 弱占优策略--Weakly Dominant Strategy
  13. 怎么预防和清除计算机病毒,预防和清除计算机病毒的方法
  14. NSG2-一个很好用的ns2的tcl脚本自动生成软件
  15. 全球及中国手机SAW滤波器行业供需现状及盈利前景预测报告(新版)2022-2027
  16. 条形码扫不出来是不是假的?呃,真不一定
  17. 互联网公司如何管理研发团队
  18. Required field ‘client_protocol‘ is unset 原因探究
  19. python用matplotlib画玫瑰_Python可视化:用Matplotlib画个玫瑰图
  20. 《程序员养成记》第1集 做程序员需要天赋吗?

热门文章

  1. IOS Table中Cell的重用reuse机制分析
  2. 解决php连接mysql数据库中文乱码问题
  3. Windows 2003下×××服务器架设攻略
  4. python并行for循环_Python并行执行for循环
  5. linux 下使用 curl post
  6. 前端JavaScript规范
  7. 扒开系统调用的三层皮(下)
  8. SQL对Xml字段的操作
  9. 降低winnt Apache服务的权限,让你的虚拟主机更安全
  10. APP开发者到期续费说明