C#簡化工作之實現網頁爬蟲獲取數據
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
1、需求想要獲取網站上所有的氣象信息,網站如下所示:
目前總共有67頁,隨便點開一個如下所示:
需要獲取所有天氣數據,如果靠一個個點開再一個個復制粘貼那么也不知道什么時候才能完成,這個時候就可以使用C#來實現網頁爬蟲獲取這些數據。 2、效果先來看下實現的效果,所有數據都已存入數據庫中,如下所示:
總共有4萬多條數據。 3、具體實現構建每一頁的URL第一頁的網址如下所示:
最后一頁的網址如下所示:
可以發現是有規律的,那么就可以先嘗試構建出每個頁面的URL // 發送 GET 請求 這里使用了HtmlAgilityPack
// 使用HtmlAgilityPack解析網頁內容 那么XPath是什么呢?
構建每一天的URL獲取到了每一頁的URL之后,我們發現在每一頁的URL都可以獲取關于每一天的URL信息,如下所示:
可以進一步構建每一天的URL,同時可以根據a的文本獲取時間,當然也可以通過其他方式獲取時間,但是這種可以獲取到11點或者17點。 代碼如下所示: for (int i = 0; i < Urls.Length; i++) 在這一步驟需要注意的是XPath的書寫,以及每一天URL的構建,以及時間的獲取。 XPath的書寫: var nodes = doc.DocumentNode.selectNodes("//div[@class=\"lie\"]/ul/li"); 表示一個類名為"lie"的div下的ul標簽下的所有li標簽,如下所示:
構建每一天的URL: var a = nodes[j].ChildNodes[3]; 這里獲取li標簽下的a標簽,如下所示:
string urlText = a.GetAttributeValue("href", ""); 這段代碼獲取a標簽中href屬性的值,這里是./202311/t20231127_3103490.shtml。 string urlText = a.GetAttributeValue("href", ""); 這里是在拼接每一天的URL。 var name = nodes[j].ChildNodes[3].InnerText; 這里是從文本中獲取時間,比如文本的值也就是name的值為:“2023年7月15日17點氣象預告”,name獲得的date就是2023-7-15 17:00。 // 將數據存入SQLite數據庫 這里是將數據存入數據庫中,ORM使用的是SQLSugar,類DayUrl如下: internal class DayUrl 最后獲取每一天URL的效果如下所示: 獲取溫度數據需要獲取的內容如下:
設計對應的類如下: internal class WeatherData 增加了一個時間,方便以后根據時間獲取。 獲取溫度數據的代碼如下: var list = db.Queryable<DayUrl>().ToList(); |