使用HtmlAgilityPack和ScrapySharp抓取網頁數據遇到的幾個問題解決方法——格式編碼問題

需要用到對應市區縣街道居委會的區域編碼,於是找到統計局的網頁,對這些數據進行抓取,用到了HtmlAgilityPack和ScrapySharp,由於也是第一次從網頁抓取數據,所以對於HtmlAgilityPack和ScrapySharp的使用也是不熟悉,期間遇到了很多問題,在這裏對其做下總結

對於HtmlAgilityPack和ScrapySharp的使用,在網上有大量的使用demo,不過看來看去基本都是同一篇,也不知道誰是原作者,這裏附上天方的博文,demo就不抄了,附上鍊接,需要的可以在去看看
TianFang-使用ScrapySharp快速從網頁中採集數據
這裏的CSS選擇器的用法很簡單,跟我們寫CSS對HTML元素做定位是一樣的。由於統計局的網頁內容如下圖
一個table套一個table,連套四個,而我們抓取數據又不僅僅是抓取一個頁面的內容,所以這裏只能找統一的規律,最後直接用了簡單粗暴的方法var divs = html.CssSelect("table table table table tr");//直接獲取到最底層的table的tr

這裏寫圖片描述

在取到對應的值後,又遇到個問題,抓取的數據無論是讀出到控制應用臺還是保存到文本中,讀取到的中文都是問號,最終發覺是格式編碼的問題,demo上的網頁用的格式編碼是utf-8,而ScrapySharp抓取的默認格式編碼應該也是utf-8所以不會出現問題,而統計局這的編碼格式是gbk2312,因爲請求抓取數據沒有使用正確的編碼格式,所以導致抓取到的數據變成亂碼。
正如前面所說,百度一搜基本都是天方的那一篇博文,根本沒有一個提出類似問題的解決方案,而且ScrapySharp的使用文檔也找不到,最後在一篇擦邊的文章中找到了解決方法代碼如下

var browser1 = new ScrapingBrowser { Encoding = Encoding.GetEncoding("gb2312") };//在定義抓取實體時,對其進行設置,之前一直在對抓取之後的內容進行編碼轉換,結果都沒有任何作用,真正的轉換是要在抓取之前對請求進行設置

至此網頁內容的抓取基本是成功的了,於是開啓程序開始讓它抓取數據
這裏寫圖片描述
但是在程序運行過程中遇到一個問題就是有時網絡出現不穩定或者過於頻繁訪問該網站,導致報502錯誤,程序就會報異常,我的解決方法是用try catch去抓取網頁內容,如果異常了這給內容賦空字符串,讓它繼續跑下去,這樣就沒有問題了,不過這個不算是一個好的解決方法,奈何目前能力有限,就只能這麼用着先了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章