【Python實戰】用代碼來訪問1024網站

1024是一個好網站html

首先,這次實戰系列的前提是您能科學的找到1024網站!我這裏並不提供網站地址,特此聲明,這裏只是用計算機科學的態度和方法,來分析一個問題。和1024網站沒有任何關聯。python

在1024網站上,不知道你是否和我同樣,平時愛逛技術討論區,愛看一些每日資訊總結的帖子,那麼會不會由於板塊的主題帖子是按照回覆時間排序而找不到本身喜歡看的帖子而心煩意亂呢?是否是爲了找本身今天沒看過的帖子,而一遍又一遍的從新從頭開始翻呢?git

別怕,我都被這些問題困擾過!社區人口衆多,帖子刷的很快,爲了看到天天發佈的帖子,板塊的排版不得不讓我每次進來都得從頭開始找,看看哪一個帖子今兒沒看過。並且是左邊看標題,右邊看發佈時間,好累啊。這樣我不喜歡,有些浪費時間。程序員

做爲一個程序員,我以爲,這些問題,都是能夠本身手動寫一個Python爬蟲來解決。github

我感受這個蟲子全網***最方便***,最牛逼最便捷,***最能解決實際問題***的蟲子!活學活用,真正的讓代碼方便個人生活,這纔是我編寫程序索要達到的目的

##咱們如今遇到的問題: 論壇的帖子排序是按照回帖時間排序的,爲了可以看到天天最新發布的帖子,老是得從頭開始看整個論壇,很煩,浪費時間。web

技術討論區帖子按照回帖時間排序

咱們但願變成的樣子

論壇的帖子按照時間發佈順序排列,這樣看天天的新內容就很省事兒。正則表達式

若是咱們要寫一個爬蟲來解決的話,大體結構應該以下:json

Daily1024結構

這裏有幾個部分:瀏覽器

  • 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***文件。

咱們整理後的網站首頁:

Daily1024的index

新整理後板塊長這個樣子:

Daily1024的技術討論板塊

Daily1024的技術討論板塊,按照時間順序排列

這樣看上去,就簡單和舒服的多了,再也不須要像以前那樣一個一個的找了。並且,咱們看過哪一個帖子,都是有不一樣顏色區分的。這樣節省好多好多時間。下面就簡單的說一下工程中運用到的技術點吧。

技術梳理

雖然如今網絡上有不少成熟的爬蟲框架,好比Scrapy,我以前也用過ScrapyScrapy確實強大,可是感受這樣體會不到爬蟲的樂趣。因此乾脆本身從零搭建一個爬蟲。從零距離感覺爬蟲,感覺Python的樂趣。

總體技術

  • python 3.6
  • requests
  • BeautifulSoup4
  • webbrowser
  • json

Config.json

這個是配置文件,將須要一些基本參數寫在這個json文件中。先關的讀取類是config_utils中的configreader

config.json

Url_manager

經過一個dict來存儲板塊名稱和對應的板塊URL,提供一些簡答的方法來操做URL

Html_download

經過使用requests模塊來進行網頁的訪問。從而拿到網頁數據,爲後面步驟的解析提供基礎。
這裏進行網絡請求的時候,因爲1024網站作了反爬處理,我添加了不一樣的HTTP header。目前還算比較好用。表頭信息在user_agents文件中。

Html_parser

經過BeautifulSoup來對html作解析處理。每個帖子都是有一個惟一id的。帖子都封裝到CaoliuItem中,而後將結果輸出到html_outputer中。這裏是經過htmltag來作的尋找,並非經過正則表達式。可能有點

Html_outputer

這個是將以前收集到的爬蟲解析結果,整理成html文件的類。最終結果有一個index頁面,每一個版塊還有本身的頁面。他們之間相互連接在一塊兒,點擊起來爽爽的,炒雞方便。

須要改進的地方 TODO

  • 總體結構雖然清晰,可是總體結構還須要優化。要作到像Scrapy那樣強大的蟲子,得一步一步來。
  • 目前爬蟲能力比較弱,沒有用到多線程爬蟲。下一個版本能夠加入多線程,這樣既能提高速度,又能提高質量。
  • parser的解析仍是太依賴網站的佈局。如果網站佈局發生改變,parser就得修改。這個問題是全部爬蟲的通病,我還在想辦法把這裏作的更活一些,不要這麼死板。
  • outputhtml文件美觀度不夠。
  • 下一版本,想將解析出來的東西,可以和MongoDB聯動,算是本地保存一份吧。由於這樣就可以看到以前的帖子信息。
  • 接下來應該最好是針對每一個帖子,再爬一層,能夠作到自動將圖片或者種子文件下載下來。這個下載圖片和種子的蟲子我以前用Scrapy的時候作過,可是仍是須要結合本身寫的蟲子比較好。
  • 最好可以將爬蟲擴展到其餘網站,好比微博啊,V2ex啊,之類的資訊網站。感受天天來回逛這幾個網站,打開這個打開那個,確實有時候挺浪費時間的,倒不如把它們天天更新的東西都整合成在一塊兒,經過一個網站,一次看個夠。這樣多爽。
  • 最終的版本就是把這個程序作成一個後臺服務,而後部署到服務器上,天天經過訪問,可以看到當天各個網站的更新內容。作到 "訪問一個,就能夠訪問所有" 的效果。

這個項目源碼,歡迎STAR。

最後來一波福利,關注公衆號:皮克啪的鏟屎官,回覆1024,可以找到你須要的東西哦~ ![關注並回復 1024 有驚喜](底部二維碼.png

)
相關文章
相關標籤/搜索