sciencedirect 網站抓取過程

 

 

開發環境

      C#+SQLite

軟件使用教程:

設置頁面

1、        首先錄入需要查詢的關鍵詞,如果需要根據年去查詢,可以勾選對應的年,支持多個年份查詢。點擊【設置關鍵字】按鈕,把待查詢關鍵字加入查詢隊列。

2、        根據需要修改分頁延時和文章查詢延時信息,修改後點擊【更改延時】按鈕生效。

3、        點擊【開始/暫停】按鈕控制查詢操作。

4、        最下方顯示待查詢的分頁數、待查詢文章數量、待入庫數據數量和已入庫數據數量。

 

 

 

 

運行日誌

執行的每一步操作都會有相應的文件描述顯示在日誌中,包括查詢分頁、查詢文檔、運行出錯、數據入庫、數據校驗等所有的日誌信息。

 

 

 

 

 

數據預覽

所有的數據都會實時存儲到SQLite數據庫中,數據會永久保存。數據預覽主要功能就是分頁查詢、數據導出功能。

如果不需要該數據後可以刪除軟件目錄下的data.db文件。

 

 

 

 

 

開發過程中的問題彙總

數據抓取

所有爬蟲的難點從來不是技術,而是網站的數據分析,表面看到的數據可能與想象中的顯示有區別。比如文章詳情的作者信息等就是通過js處理Json格式數據展示的。爲了找到具體的數據需要解析整個Json數據。

Json數據也不是最難得,分析Json數據纔是最難得。

KeyValue格式的數據Key=“$”/”$$”/”_”/”Get-Text”等等,總之C#怎麼不兼容怎麼來。

針對上述數據我能想到的有2中解決方案:

1、 對所有的數據遍歷 key/value,然後根據key對應的name或者value的值進行匹配然後獲取數據信息。

2、 由於dynamic支持動態類型,所以只要key可以作爲變量就能根據名字寫死處理。爲了能拿到符合規則的名字,只好Replace。

 

 

我是不是很聰明,哈哈。

關於IP限制

限制IP無疑是一個很好的手段,針對IP限制,只能放緩查詢速度。

再次我通過簡單的隨機時間訪問和訪問完一個網頁後在訪問下一個網頁的辦法來防止IP被封。

關於網站未來

爲了更好的適應網站的查詢條件,比如年,會顯示從1996年到當前時間的年份。

運行日誌

爲了更明顯的顯示日誌信息,把執行成功的標記爲藍色,失敗的標記爲紅色。

關於Dapper

剛剛接觸Dapper的時候,把他當作一個完美的DbHelper使用的。後來發現無論是事務、確認數據是否存在、先查後插入都需要自己去完整,我心目中的完美Dapper啊

 

 

 

不過SQLite還是比SQLServer有好的地方的,

比如Create Table If Not Exists TableName

比如 Replace Into 減少了很多代碼量

數據導出

導出數據到Excel,NPOI永遠是利器。

待處理問題

       數據中如果存在上下標,還不知道怎麼處理和保存。萬能的百度沒有幫到我,Unicode中不知道a的上標是什麼,下標也沒有成功顯示。求大神們指點…

 

 

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