日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

c# 爬虫 -ChromeDriver+HtmlAgilityPack爬取比赛实时比分

發布時間:2023/12/4 C# 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c# 爬虫 -ChromeDriver+HtmlAgilityPack爬取比赛实时比分 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景

最近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爬取比赛实时比分的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。