当前位置: 首页 > news >正文

深圳电子商城网站建设wordpress 第一张图片 get first

深圳电子商城网站建设,wordpress 第一张图片 get first,资格证网站怎么做,wordpress幻灯片主题设置1、需求 想要获取网站上所有的气象信息#xff0c;网站如下所示#xff1a; 目前总共有67页#xff0c;随便点开一个如下所示#xff1a; 需要获取所有天气数据#xff0c;如果靠一个个点开再一个个复制粘贴那么也不知道什么时候才能完成#xff0c;这个时候就可以使用C…1、需求 想要获取网站上所有的气象信息网站如下所示 目前总共有67页随便点开一个如下所示 需要获取所有天气数据如果靠一个个点开再一个个复制粘贴那么也不知道什么时候才能完成这个时候就可以使用C#来实现网页爬虫获取这些数据。 2、效果 先来看下实现的效果所有数据都已存入数据库中如下所示 总共有4万多条数据。 3、具体实现 构建每一页的URL 第一页的网址如下所示 最后一页的网址如下所示 可以发现是有规律的那么就可以先尝试构建出每个页面的URL // 发送 GET 请求string url https://cj.msa.gov.cn/xxgk/xxgkml/aqxx/qxyg/;HttpResponseMessage response await httpClient.GetAsync(url);// 处理响应if (response.IsSuccessStatusCode){string responseBody await response.Content.ReadAsStringAsync();doc.LoadHtml(responseBody);//获取需要的数据所在的节点var node doc.DocumentNode.SelectSingleNode(//div[class\page\]/script);string rawText node.InnerText.Trim();// 使用正则表达式来匹配页数数据Regex regex new Regex(\b(\d)\b);Match match regex.Match(rawText);if (match.Success){string pageNumber match.Groups[1].Value;Urls GetUrls(Convert.ToInt32(pageNumber));MessageBox.Show($获取每个页面的URL成功总页面数为{Urls.Length});}}//构造每一页的URLpublic string[] GetUrls(int pageNumber){string[] urls new string[pageNumber];for (int i 0; i urls.Length; i){if (i 0){urls[i] https://cj.msa.gov.cn/xxgk/xxgkml/aqxx/qxyg/index.shtml;}else{urls[i] $https://cj.msa.gov.cn/xxgk/xxgkml/aqxx/qxyg/index_{i}.shtml;}}return urls;}这里使用了HtmlAgilityPack HtmlAgilityPackHAP是一个用于处理HTML文档的.NET库。它允许你方便地从HTML文档中提取信息修改HTML结构并执行其他HTML文档相关的操作。HtmlAgilityPack 提供了一种灵活而强大的方式来解析和处理HTML使得在.NET应用程序中进行网页数据提取和处理变得更加容易。 // 使用HtmlAgilityPack解析网页内容var doc new HtmlAgilityPack.HtmlDocument();doc.LoadHtml(需要解析的Html);//获取需要的数据所在的节点 var node doc.DocumentNode.SelectSingleNode(XPath);那么XPath是什么呢 XPathXML Path Language是一种用于在XML文档中定位和选择节点的语言。它是W3CWorld Wide Web Consortium的标准通常用于在XML文档中执行查询操作。XPath提供了一种简洁而强大的方式来导航和操作XML文档的内容。 构建每一天的URL 获取到了每一页的URL之后我们发现在每一页的URL都可以获取关于每一天的URL信息如下所示 可以进一步构建每一天的URL同时可以根据a的文本获取时间当然也可以通过其他方式获取时间但是这种可以获取到11点或者17点。 代码如下所示 for (int i 0; i Urls.Length; i){// 发送 GET 请求string url2 Urls[i];HttpResponseMessage response2 await httpClient.GetAsync(url2);// 处理响应if (response2.IsSuccessStatusCode){string responseBody2 await response2.Content.ReadAsStringAsync();doc.LoadHtml(responseBody2);var nodes doc.DocumentNode.SelectNodes(//div[class\lie\]/ul/li);for (int j 0; j nodes.Count; j){var name nodes[j].ChildNodes[3].InnerText;//只有name符合下面的格式才能成功转换为时间所以这里需要有一个判断if (name ! name.Contains(气象预告)){var dayUrl new DayUrl();//string format;//DateTime date;// 定义日期时间格式string format yyyy年M月d日H点气象预告;// 解析字符串为DateTimeDateTime date DateTime.ParseExact(name, format, null);var a nodes[j].ChildNodes[3];string urlText a.GetAttributeValue(href, );string newValue https://cj.msa.gov.cn/xxgk/xxgkml/aqxx/qxyg/;string realUrl ;realUrl newValue urlText.Substring(1);dayUrl.Date date;dayUrl.Url realUrl;dayUrlList.Add(dayUrl);}else{Debug.WriteLine($在{name}处判断不符合要求);}}}}// 将数据存入SQLite数据库db.Insertable(dayUrlList.OrderBy(x x.Date).ToList()).ExecuteCommand();MessageBox.Show($获取每天的URL成功共有{dayUrlList.Count}条); }在这一步骤需要注意的是XPath的书写以及每一天URL的构建以及时间的获取。 XPath的书写 var nodes doc.DocumentNode.SelectNodes(//div[class\lie\]/ul/li);表示一个类名为lie的div下的ul标签下的所有li标签如下所示 构建每一天的URL var a nodes[j].ChildNodes[3];string urlText a.GetAttributeValue(href, );string newValue https://cj.msa.gov.cn/xxgk/xxgkml/aqxx/qxyg/;string realUrl ;realUrl newValue urlText.Substring(1);这里获取li标签下的a标签如下所示 string urlText a.GetAttributeValue(href, );这段代码获取a标签中href属性的值这里是./202311/t20231127_3103490.shtml。 string urlText a.GetAttributeValue(href, );string newValue https://cj.msa.gov.cn/xxgk/xxgkml/aqxx/qxyg/;string realUrl newValue urlText.Substring(1);这里是在拼接每一天的URL。 var name nodes[j].ChildNodes[3].InnerText;// 定义日期时间格式 string format yyyy年M月d日H点气象预告;// 解析字符串为DateTime DateTime date DateTime.ParseExact(name, format, null);这里是从文本中获取时间比如文本的值也就是name的值为“2023年7月15日17点气象预告”name获得的date就是2023-7-15 1700。 // 将数据存入SQLite数据库db.Insertable(dayUrlList.OrderBy(x x.Date).ToList()).ExecuteCommand();MessageBox.Show($获取每天的URL成功共有{dayUrlList.Count}条);这里是将数据存入数据库中ORM使用的是SQLSugar类DayUrl如下 internal class DayUrl {[SugarColumn(IsPrimaryKey true, IsIdentity true)]public int Id { get; set; }public DateTime Date { get; set; }public string Url { get; set; } }最后获取每一天URL的效果如下所示 获取温度数据 需要获取的内容如下 设计对应的类如下 internal class WeatherData {[SugarColumn(IsPrimaryKey true, IsIdentity true)]public int Id { get; set; }public string? StationName { get; set; }public string? Weather { get; set; }public string? Tem_Low { get; set; }public string? Tem_High { get; set; }public string? Wind { get; set; }public string? Visibility_Low { get; set; }public string? Visibility_High { get; set; }public string? Fog { get; set; }public string? Haze { get; set; }public DateTime Date { get; set; } }增加了一个时间方便以后根据时间获取。 获取温度数据的代码如下 var list db.QueryableDayUrl().ToList();for (int i 0; i list.Count; i){HttpResponseMessage response await httpClient.GetAsync(list[i].Url);// 处理响应if (response.IsSuccessStatusCode){string responseBody2 await response.Content.ReadAsStringAsync();doc.LoadHtml(responseBody2);var nodes doc.DocumentNode.SelectNodes(//table);if (nodes ! null){var table nodes[5];var trs table.SelectNodes(tbody/tr);for (int j 1; j trs.Count; j){var tds trs[j].SelectNodes(td);switch (tds.Count){case 8:var wd8 new WeatherData();wd8.StationName tds[0].InnerText.Trim().Replace(nbsp;, );wd8.Weather tds[1].InnerText.Trim().Replace(nbsp;, );wd8.Tem_Low tds[2].InnerText.Trim().Replace(nbsp;, );wd8.Tem_High tds[3].InnerText.Trim().Replace(nbsp;, );wd8.Wind tds[4].InnerText.Trim().Replace(nbsp;, );wd8.Visibility_Low tds[5].InnerText.Trim().Replace(nbsp;, );wd8.Visibility_High tds[6].InnerText.Trim().Replace(nbsp;, );wd8.Fog tds[7].InnerText.Trim().Replace(nbsp;, );wd8.Date list[i].Date;weatherDataList.Add(wd8);break;case 9:var wd9 new WeatherData();wd9.StationName tds[0].InnerText.Trim().Replace(nbsp;, );wd9.Weather tds[1].InnerText.Trim().Replace(nbsp;, );wd9.Tem_Low tds[2].InnerText.Trim().Replace(nbsp;, );wd9.Tem_High tds[3].InnerText.Trim().Replace(nbsp;, );wd9.Wind tds[4].InnerText.Trim().Replace(nbsp;, );wd9.Visibility_Low tds[5].InnerText.Trim().Replace(nbsp;, );wd9.Visibility_High tds[6].InnerText.Trim().Replace(nbsp;, );wd9.Fog tds[7].InnerText.Trim().Replace(nbsp;, );wd9.Haze tds[8].InnerText.Trim().Replace(nbsp;, );wd9.Date list[i].Date;weatherDataList.Add(wd9);break;default:break;}}}else{}}// 输出进度提示Debug.WriteLine($已处理完成第{i}个URL);}// 将数据存入SQLite数据库db.Insertable(weatherDataList.OrderBy(x x.Date).ToList()).ExecuteCommand();MessageBox.Show($获取天气数据成功共有{weatherDataList.Count}条);}这里使用swith case是因为网页的格式并不是一层不变的有时候少了一列没有霾的数据。 wd9.StationName tds[0].InnerText.Trim().Replace(nbsp;, );这里对文本进行这样处理是因为原始的数据是“\n内容nbsp\n”,C#中String.Trim()方法会删除字符串前后的空白string.Replace(“a”,“b”)方法会将字符串中的a换成b。 效果如下所示 将数据全部都存入数据库中了。 4、最后 通过这个实例说明了其实C#也是可以实现网页爬虫的对于没有反爬的情况下是完全适用的再配合linq做数据处理也是可以的。
http://www.w-s-a.com/news/764420/

相关文章:

  • 如何减少网站建设中的错误温州网站公司哪家好
  • 宜章网站建设北京定制公交网站
  • 怎么让谷歌收录我的网站郑州网站建设更好
  • 在线视频网站开发方案phpaspnet网站开发实例视频
  • 正常做一个网站多少钱网站开发所遵循
  • 西部数码网站备份领英创建公司主页
  • 中山网站建设文化平台成都电商app开发
  • 无锡网站推广公司排名中国十大网站建设
  • 网站建设报价怎么差别那么大深圳开发公司网站建设
  • 京东商城网站建设方案书建设网站平台
  • 如何查询网站建设时间赤峰建网站的电话
  • 域名购买网站有哪些公司企业邮箱管理制度
  • 阿里云服务起做网站抖音seo推荐算法
  • 免费建站工具机械网站建设公司推荐
  • 怎么用自己主机做网站_如何做简单的网站
  • 阿里巴巴国际站跨境电商平台为什么有点网站打不开
  • 甘肃做网站哪家好网站开发 都包含什么语言
  • 合肥哪里有做网站的广告型网站怎么做的
  • 用dede做的网站国外免费空间哪个好
  • dede个人网站模板企点
  • 韩雪个人网站wordpress 怎么添加网站备案信息
  • 个人网站可以做地方技能培训班
  • 品牌营销策略研究无锡 网站 seo 优化
  • 在线推广网站的方法有哪些织梦网站首页目录在哪
  • 做爰全过程免费网站的视频做网站的几个步骤
  • cpa建站教程青海西宁制作网站企业
  • 简易的在线数据库网站模板网站多服务器建设
  • 成都seo网站建设花店网页模板html
  • 义乌市网站制作网络营销策略名词解释
  • 高端品牌网站建设图片wordpress 资源站主题