需要解析对应的HTML源码:
<div class="left">
<div class="wea_alert clearfix">
<ul>
<li>
<a href = "https://tianqi.moji.com/aqi/china/jiangxi/hukou-county" >
< span class="level level_2">
<img src = "https://h5tq.moji.com/tianqi/assets/images/aqi/2.png" alt="88 良">
</span>
<em>88 良</em>
</a>
</li>
</ul>
</div>
<div class="wea_weather clearfix">
<em>30</em>
<span><img src = "https://h5tq.moji.com/tianqi/assets/images/weather/w1.png" alt="多云"></span>
<b>多云</b>
<strong class="info_uptime">今天17:04更新</strong>
</div>
<div class="wea_about clearfix">
<span>湿度 50%</span>
<em>南风3级</em>
</div>
<div class="wea_tips clearfix">
<span>今日天气提示</span>
<em>略微偏热,注意衣物变化。</em>
</div>
</div>
<div class="right">
<div class="wea_info_avator">
<img src = "https://h5tq.moji.com/tianqi/assets//images/avator/icon/2.png" alt="墨迹天气 小墨哥">
<div id = "windows_download" >
< img src="https://h5tq.moji.com/tianqi/assets//images/icon/avator_windows.png" height="35" alt="Windows 下载">
<a href = "http://download.moji001.com/mojiapp/windoz/MoWeatherInstall_1.8.1.1.exe" target="_blank">Windows 下载</a>
</div>
</div>
</div>
接收数据的对象
public class MainInfos
{
/// <summary>
/// 日期
/// </summary>
public string TodayDate { get; set; } = DateTime.Now.ToString("yyyy年MM月dd日");
/// <summary>
/// 温度
/// </summary>
public string WenduStr { get; set; }
/// <summary>
/// 风向
/// </summary>
public string FengsuStr { get; set; }
/// <summary>
///气压
/// </summary>
public string QiyaStr { get; set; }
/// <summary>
/// 湿度
/// </summary>
public string ShiduStr { get; set; }
/// <summary>
/// 降水
/// </summary>
public string JiangshuiStr { get; set; }
/// <summary>
///空气指数
/// </summary>
public string KongqiZhishuStr { get; set; }
/// <summary>
/// 天气
/// </summary>
public string TianqiStr { get; set; }
/// <summary>
/// 更新时间
/// </summary>
public string GenxinShijianStr { get; set; }
/// <summary>
/// j今日提示
/// </summary>
public string JinriTishi { get; set; }
/// <summary>
/// 当前天气的图标地址
/// </summary>
public string ImagePath { get; set; }
}
采集数据的方法:
/// <summary>
/// 读取天气数据
/// </summary>
public static class ReadFromWeb
{
public static MainInfos GetFromUrl(string Url)
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
try
{
HtmlWeb web = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = web.Load(Url);
HtmlNode rootnode = doc.DocumentNode;
MainInfos ThisMainInfos = null;
HtmlNodeCollection GetUrlInfoNodes = doc.DocumentNode.SelectNodes("//div[@class='wrap clearfix wea_info']");
if (GetUrlInfoNodes != null)
{
ThisMainInfos = new MainInfos();
HtmlNode ThisMainNode = GetUrlInfoNodes.FirstOrDefault();
string InnerStr = ThisMainNode.InnerHtml;
//截取出来进行数据分析重新创建一个操作
HtmlDocument DOCJiequ = new HtmlDocument();
DOCJiequ.LoadHtml(InnerStr);
///获取空气指数
HtmlNodeCollection NodesKongqizhishu = DOCJiequ.DocumentNode.SelectNodes("//div[@class='wea_alert clearfix']");
if (NodesKongqizhishu!=null && NodesKongqizhishu.Count >0 )
{
HtmlNode KongqiZhishuNode = NodesKongqizhishu[0];
ThisMainInfos.KongqiZhishuStr = KongqiZhishuNode.InnerText.Replace("\r\n","").Replace(" ","").Trim();
}
///获取天气温度 图标
HtmlNodeCollection NodesTianqiWendu = DOCJiequ.DocumentNode.SelectNodes("//div[@class='wea_weather clearfix']");
if (NodesTianqiWendu != null && NodesTianqiWendu.Count > 0)
{
HtmlNode ThisWenduNode = NodesTianqiWendu[0];
HtmlNodeCollection WenduShowNodes = ThisWenduNode.ChildNodes;
HtmlNode WenduCanshuNode = WenduShowNodes.Where(x => x.Name == "em").FirstOrDefault();//温度
if (WenduCanshuNode!=null )
{
ThisMainInfos.WenduStr = WenduCanshuNode.InnerText;
}
HtmlNode TianqiCanshuNode = WenduShowNodes.Where(x => x.Name == "b").FirstOrDefault();//天气
if (TianqiCanshuNode != null)
{
ThisMainInfos.TianqiStr = TianqiCanshuNode.InnerText;
}
HtmlNode TianqiTubiaoCanshuNode = WenduShowNodes.Where(x => x.Name == "span").FirstOrDefault();//天气图标
if (TianqiTubiaoCanshuNode != null)
{
HtmlNode TianqiImageCanshuNode = TianqiTubiaoCanshuNode.FirstChild;//获取image标签
ThisMainInfos.ImagePath =TianqiImageCanshuNode.GetAttributeValue("src",string.Empty);
}
HtmlNode GenxinShijianCanshuNode = WenduShowNodes.Where(x => x.Name == "strong").FirstOrDefault();//更新时间
if (GenxinShijianCanshuNode != null)
{
ThisMainInfos.GenxinShijianStr = GenxinShijianCanshuNode.InnerText;
}
}
///获取湿度 风力
HtmlNodeCollection NodesShiduFengli= DOCJiequ.DocumentNode.SelectNodes("//div[@class='wea_about clearfix']");
if (NodesShiduFengli!=null && NodesShiduFengli.Count > 0)
{
HtmlNode ThisShiduFenliNode = NodesShiduFengli[0];
HtmlNode ShiduNode = ThisShiduFenliNode.ChildNodes.Where(x=>x.Name == "span").FirstOrDefault() ;//湿度
if (ShiduNode != null)
{
ThisMainInfos.ShiduStr = ShiduNode.InnerText;
}
HtmlNode FenliNode = ThisShiduFenliNode.ChildNodes.Where(x => x.Name == "em").FirstOrDefault();//风力
if (FenliNode != null)
{
ThisMainInfos.FengsuStr = FenliNode.InnerText;
}
}
///获取今日提示
HtmlNodeCollection NodesJinritishi = DOCJiequ.DocumentNode.SelectNodes("//div[@class='wea_tips clearfix']");
if (NodesJinritishi != null && NodesJinritishi.Count > 0)
{
HtmlNode ThisJinriTishiNode = NodesJinritishi[0];
HtmlNode JinriTishiNode = ThisJinriTishiNode.ChildNodes.Where(x => x.Name == "em").FirstOrDefault();//今日提示
if (JinriTishiNode != null)
{
ThisMainInfos.JinriTishi = JinriTishiNode.InnerText;
}
}
}
return ThisMainInfos;
}
catch (WebException ex)
{
//连接失败
return null;
}
}
}
应用方法:
MainInfos ThisModel = ReadFromWeb.GetFromUrl("https://tianqi.moji.com/weather/china/jiangxi/hukou-county");
if (ThisModel!=null )
{
MainGrid.DataContext = ThisModel ;
}