1024是一個好網站html
首先,這次實戰系列的前提是您能科學的找到1024網站!我這裏並不提供網站地址,特此聲明,這裏只是用計算機科學的態度和方法,來分析一個問題。和1024網站沒有任何關聯。python
在1024網站上,不知道你是否和我同樣,平時愛逛技術討論區,愛看一些每日資訊總結的帖子,那麼會不會由於板塊的主題帖子是按照回覆時間排序而找不到本身喜歡看的帖子而心煩意亂呢?是否是爲了找本身今天沒看過的帖子,而一遍又一遍的從新從頭開始翻呢?git
別怕,我都被這些問題困擾過!社區人口衆多,帖子刷的很快,爲了看到天天發佈的帖子,板塊的排版不得不讓我每次進來都得從頭開始找,看看哪一個帖子今兒沒看過。並且是左邊看標題,右邊看發佈時間,好累啊。這樣我不喜歡,有些浪費時間。程序員
做爲一個程序員,我以爲,這些問題,都是能夠本身手動寫一個Python爬蟲來解決。github
##咱們如今遇到的問題: 論壇的帖子排序是按照回帖時間排序的,爲了可以看到天天最新發布的帖子,老是得從頭開始看整個論壇,很煩,浪費時間。web
論壇的帖子按照時間發佈順序排列,這樣看天天的新內容就很省事兒。正則表達式
若是咱們要寫一個爬蟲來解決的話,大體結構應該以下:json
這裏有幾個部分:瀏覽器
上面的結構很簡單,那麼簡單的流程就是:咱們先配置好本地的config.json文件,而後啓動程序,爬蟲會自動根據配置好的信息,而後抓取各個板塊前幾頁的內容,根據帖子發帖時間,篩選爬出出來信息,隨後,將獲取到的信息按照時間排序,最後輸出成html格式的文件,使用本地的網頁瀏覽器打開。瀏覽器裏面能夠看到帖子的id,帖子的標題以及帖子的發佈時間。經過點擊帖子的標題,能夠跳轉到社區的帖子。服務器
這樣,內容豐富的小草網站,就直接變成了咱們本地寫的最簡單的***html***文件。
咱們整理後的網站首頁:
新整理後板塊長這個樣子:
這樣看上去,就簡單和舒服的多了,再也不須要像以前那樣一個一個的找了。並且,咱們看過哪一個帖子,都是有不一樣顏色區分的。這樣節省好多好多時間。下面就簡單的說一下工程中運用到的技術點吧。
雖然如今網絡上有不少成熟的爬蟲框架,好比Scrapy
,我以前也用過Scrapy
,Scrapy
確實強大,可是感受這樣體會不到爬蟲的樂趣。因此乾脆本身從零搭建一個爬蟲。從零距離感覺爬蟲,感覺Python
的樂趣。
python 3.6
requests
BeautifulSoup4
webbrowser
json
這個是配置文件,將須要一些基本參數寫在這個json文件中。先關的讀取類是config_utils
中的configreader
。
經過一個dict
來存儲板塊名稱和對應的板塊URL
,提供一些簡答的方法來操做URL
。
經過使用requests
模塊來進行網頁的訪問。從而拿到網頁數據,爲後面步驟的解析提供基礎。
這裏進行網絡請求的時候,因爲1024網站
作了反爬處理,我添加了不一樣的HTTP header
。目前還算比較好用。表頭信息在user_agents
文件中。
經過BeautifulSoup
來對html
作解析處理。每個帖子都是有一個惟一id的。帖子都封裝到CaoliuItem
中,而後將結果輸出到html_outputer
中。這裏是經過html
的tag
來作的尋找,並非經過正則表達式。可能有點僵。
這個是將以前收集到的爬蟲解析結果,整理成html
文件的類。最終結果有一個index
頁面,每一個版塊還有本身的頁面。他們之間相互連接在一塊兒,點擊起來爽爽的,炒雞方便。
Scrapy
那樣強大的蟲子,得一步一步來。parser
的解析仍是太依賴網站的佈局。如果網站佈局發生改變,parser
就得修改。這個問題是全部爬蟲的通病,我還在想辦法把這裏作的更活一些,不要這麼死板。output
的html
文件美觀度不夠。MongoDB
聯動,算是本地保存一份吧。由於這樣就可以看到以前的帖子信息。Scrapy
的時候作過,可是仍是須要結合本身寫的蟲子比較好。這個項目源碼,歡迎STAR。
最後來一波福利,關注公衆號:皮克啪的鏟屎官,回覆1024,可以找到你須要的東西哦~ ![關注並回復 1024 有驚喜](底部二維碼.png