1024是一個好網站
首先,此次實戰系列的前提是您能科學的找到1024網站!我這裡並不提供網站地址,特此宣告,這裡只是用電腦科學的態度和方法,來分析一個問題。和1024網站沒有任何關聯。
在1024網站上,不知道你是否和我一樣,平時愛逛技術討論區,愛看一些每日資訊總結的帖子,那麼會不會因為板塊的主題帖子是按照回覆時間排序而找不到自己喜歡看的帖子而心煩意亂呢?是不是為了找自己今天沒看過的帖子,而一遍又一遍的重新從頭開始翻呢?
別怕,我都被這些問題困擾過!社群人口眾多,帖子刷的很快,為了看到每天釋出的帖子,板塊的排版不得不讓我每次進來都得從頭開始找,看看哪個帖子今兒沒看過。而且是左邊看標題,右邊看釋出時間,好累啊。這樣我不喜歡,有些浪費時間。
作為一個程式設計師,我覺得,這些問題,都是可以自己手動寫一個Python爬蟲來解決。
我感覺這個蟲子全網***最方便***,最牛逼,最便捷,***最能解決實際問題***的蟲子!活學活用,真正的讓程式碼方便我的生活,這才是我編寫程式索要達到的目的。
##我們現在遇到的問題: 論壇的帖子排序是按照回帖時間排序的,為了能夠看到每天最新發布的帖子,總是得從頭開始看整個論壇,很煩,浪費時間。
我們希望變成的樣子
論壇的帖子按照時間釋出順序排列,這樣看每天的新內容就很省事兒。
如果我們要寫一個爬蟲來解決的話,大致結構應該如下:
這裡有幾個部分:
- config.json: 這個算是配置檔案,目前需要填入的資訊有: 1.1024網站的的URL 2.爬蟲結果輸出的的檔案位置 3.爬蟲需要爬的最大page num 4.板塊資訊,指論壇的板塊名稱(這個可以自定義)和板塊的fid
- Url_manager: 管理備爬取的URL。
- Html_downloader: 爬蟲獲取網頁資訊。
- Html_parser: 爬蟲的網頁解析器。
- Html_output: 爬蟲輸出結果。
上面的結構很簡單,那麼簡單的流程就是:我們先配置好本地的config.json檔案,然後啟動程式,爬蟲會自動根據配置好的資訊,然後抓取各個板塊前幾頁的內容,根據帖子發帖時間,篩選爬出出來資訊,隨後,將獲取到的資訊按照時間排序,最後輸出成html格式的檔案,使用本地的網頁瀏覽器開啟。瀏覽器裡面可以看到帖子的id,帖子的標題以及帖子的釋出時間。通過點選帖子的標題,可以跳轉到社群的帖子。
這樣,內容豐富的小草網站,就直接變成了我們本地寫的最簡單的***html***檔案。
我們整理後的網站首頁:
新整理後板塊長這個樣子:
這樣看上去,就簡單和舒服的多了,不再需要像之前那樣一個一個的找了。而且,我們看過哪個帖子,都是有不同顏色區分的。這樣節省好多好多時間。下面就簡單的說一下工程中運用到的技術點吧。
技術梳理
雖然現在網路上有很多成熟的爬蟲框架,比如Scrapy
,我之前也用過Scrapy
,Scrapy
確實強大,但是感覺這樣體會不到爬蟲的樂趣。所以乾脆自己從零搭建一個爬蟲。從零距離感受爬蟲,感受Python
的樂趣。
整體技術
python 3.6
requests
BeautifulSoup4
webbrowser
json
Config.json
這個是配置檔案,將需要一些基本引數寫在這個json檔案中。先關的讀取類是config_utils
中的configreader
。
Url_manager
通過一個dict
來儲存板塊名稱和對應的板塊URL
,提供一些簡答的方法來操作URL
。
Html_download
通過使用requests
模組來進行網頁的訪問。從而拿到網頁資料,為後面步驟的解析提供基礎。
這裡進行網路請求的時候,由於1024網站
做了反爬處理,我新增了不同的HTTP header
。目前還算比較好用。表頭資訊在user_agents
檔案中。
Html_parser
通過BeautifulSoup
來對html
做解析處理。每一個帖子都是有一個唯一id的。帖子都封裝到CaoliuItem
中,然後將結果輸出到html_outputer
中。這裡是通過html
的tag
來做的尋找,並不是通過正規表示式。可能有點僵。
Html_outputer
這個是將之前收集到的爬蟲解析結果,整理成html
檔案的類。最終結果有一個index
頁面,每個版塊還有自己的頁面。他們之間相互連結在一起,點選起來爽爽的,炒雞方便。
需要改進的地方 TODO
- 整體結構雖然清晰,但是整體結構還需要優化。要做到像
Scrapy
那樣強大的蟲子,得一步一步來。 - 目前爬蟲能力比較弱,沒有用到多執行緒爬蟲。下一個版本可以加入多執行緒,這樣既能提升速度,又能提升質量。
parser
的解析還是太依賴網站的佈局。若是網站佈局發生改變,parser
就得修改。這個問題是所有爬蟲的通病,我還在想辦法把這裡做的更活一些,不要這麼死板。output
的html
檔案美觀度不夠。- 下一版本,想將解析出來的東西,能夠和
MongoDB
聯動,算是本地儲存一份吧。因為這樣就能夠看到之前的帖子資訊。 - 接下來應該最好是針對每個帖子,再爬一層,可以做到自動將圖片或者種子檔案下載下來。這個下載圖片和種子的蟲子我之前用
Scrapy
的時候做過,但是還是需要結合自己寫的蟲子比較好。 - 最好能夠將爬蟲擴充套件到其他網站,比如微博啊,V2ex啊,之類的資訊網站。感覺每天來回逛這幾個網站,開啟這個開啟那個,確實有時候挺浪費時間的,倒不如把它們每天更新的東西都整合成在一起,通過一個網站,一次看個夠。這樣多爽。
- 最終的版本就是把這個程式做成一個後臺服務,然後部署到伺服器上,每天通過訪問,能夠看到當天各個網站的更新內容。做到 "訪問一個,就可以訪問全部" 的效果。
這個專案原始碼,歡迎STAR。
最後來一波福利,關注公眾號:皮克啪的鏟屎官,回覆1024,能夠找到你需要的東西哦~ ![關注並回復 1024 有驚喜](底部二維碼.png
)