承接前文对健康码,行程码的识别。疫情下,有一种需求是判断行程码是否经过高风险地区。
由于高风险地区是实时变化更新的,人工维护的工作太过于繁琐,此时我们可以使用爬虫去获取高风险地区的数据。
爬虫程序主要是模拟请求,获取页面返回的结果,有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++;
}
干净又卫生呀兄弟们~~次哦!