保钠

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

承接前文对健康码,行程码的识别。疫情下,有一种需求是判断行程码是否经过高风险地区。

由于高风险地区是实时变化更新的,人工维护的工作太过于繁琐,此时我们可以使用爬虫去获取高风险地区的数据。

爬虫程序主要是模拟请求,获取页面返回的结果,有json,html dom树等等

这里主要使用WebClient,NuGet包安装HTML解析类库HtmlAgilityPack,支持用XPath来解析HTML

XPath格式可F12选择元素右击Copy-->Copy full XPath(或者Copy XPath;相对路径绝对路径的区别)

上菜:

WebClient wc = new WebClient();
wc.BaseAddress = uri; 
wc.Encoding = Encoding.UTF8;
HtmlDocument doc = new HtmlDocument();
string html = wc.DownloadString(uri);   //这里的uri就是页面请求的url
doc.LoadHtml(html);
//HtmlNode node = doc.DocumentNode.SelectSingleNode("/html/body/div[4]/div[1]/div[2]/ul[1]"); //这里的参数是XPath格式,HtmlNode获取单节点的内容;HtmlNodeCollection获取所有节点内容    
HtmlNodeCollection node = doc.DocumentNode.SelectNodes("/html/body/div[1]/div[2]/div[4]/div/div/div");

HtmlDocument doc3 = new HtmlDocument();
doc3.LoadHtml(html);
HtmlNodeCollection node3 = doc3.DocumentNode.SelectNodes("/html/body/div[1]/div[2]/div[4]/div[1]/div/div");

HtmlDocument doc4 = new HtmlDocument();
doc4.LoadHtml(html);
HtmlNodeCollection node4 = doc4.DocumentNode.SelectNodes("/html/body/div[1]/div[2]/div[4]/div[1]/div/ul");

List<T> listHighRisk = new List<T>(); //下面就是对node节点的解析了可忽略,需要针对返回的html或者dom进行具体解析
int i = 0;
foreach (var item in node3)  //
{
  string innerText3 = item.InnerText.Replace(" ","");
  var arry = innerText3.Replace("\r\n","&").Split('&');
  arry = arry.Where(x => !string.IsNullOrEmpty(x)).ToArray();
  string innerHtml = item.InnerHtml;
  string provinceCity = "";
  if (arry!=null &&arry.Length>2)
  {
    provinceCity = arry[0] + "-" + arry[1];
  }
  string innerText4 = node4[i].InnerText.Replace(" ", "");
  var arryDetail = innerText4.Replace("\r\n", "&").Split('&');
  arryDetail = arryDetail.Where(x => !string.IsNullOrEmpty(x)).ToArray();
  // todo 解析出的数据处理
  i++;
}

 

干净又卫生呀兄弟们~~次哦!

 

posted on 2022-08-11 14:32  保钠  阅读(396)  评论(0编辑  收藏  举报