一直想學爬蟲,也是由於種種原因吧,沒能系統地學習。正好最近在大工pt上看到了爬蟲的系統教程,全下載下來,學習並在博客上記錄一下。因爲我是一個比較懶的人,對於自動化的技術非常着迷,只要能讓機器來做,就不需要用人是我一直以來的執念。所以我對機器學習以及其分支-深度學習,爬蟲非常着迷。
本文分爲兩個部分來寫:爬蟲簡介,爬蟲前期準備工作
爬蟲簡介
爬蟲本質上來說是一種按照一定規則,自動地抓取萬維網信息的腳本。網絡抓取的策略可以分爲深度優先、廣度優先和最佳優先三種。深度優先在很多情況下會導致trapped的問題。
最佳優先搜索策略
最佳優先搜索策略按照一定的網頁分析算法,預測候選URL與目標網頁的相似度,或與主題的相關性,並選取評價最好的一個或幾個URL進行抓取。這是一種局部最優的搜索蘇凡
爬蟲的組成部分:
- 控制器:主要是負責給多線程中的各個爬蟲線程分配工作任務
- 解析器:主要是下載網頁,進行頁面處理,將一些JS腳本標籤、CSS代碼內容、空格字符、HTML標籤處理掉
- 資源庫:用來存放下載到的網頁資源,一般使用數據庫進行存儲
爬蟲工作的基本流程:
- 發起請求:通過HTTP庫向目標站點發起請求,即發送一個Request,請求包含額外的headers等信息,等待服務器響應。
- 獲取響應內容:如果服務器能正常響應,會得到一個Response,Response的內容就是所要獲取的頁面內容,類型可能有HTML,JSon字符串,二進制數據(如圖片,視頻)等類型
- 解析內容:得到的內容可能是HTML,可以用正則表達式,網頁解析庫進行解析。可能是JSon,可以直接轉爲JSon對象解析,可能是二進制數據,可以保存或者進一步處理
- 保存數據:保存至數據庫,或者保存特定格式的文件。
名詞解釋:
Request和Response:
瀏覽器發送信息給信息給網址所在服務器,這個過程叫做HTTP Request
服務器收到瀏覽器發送的信息之後,能夠根據瀏覽器發送信息的內容作出相應的處理,然後把消息回傳給瀏覽器,這個過程叫做HTTP Response
瀏覽器收到服務器的Response信息之後,會對信息進行相應的處理,然後顯示
Request包含的信息:
請求方式:主要有GET,POST兩種類型,另外還有HEAD,DELETE,OPTIONS等
請求URL:URL(統一資源定位符),如一個網頁文檔,一張圖片,一個視頻等都可以用URL唯一確定。
請求頭:包含請求時的頭部信息,如User-Agent,Host,Cookies等信息
請求體:請求額外攜帶的信息
Response包含的信息:
響應狀態:有多種響應狀態,如200代表成功,301代表跳轉,404代表找不到頁面,502代表服務器錯誤
響應頭:如內容類型,內容長度,服務器信息,設置Cookie等
響應體:最主要的部分,包含請求資源的內容,如網頁HTML,圖片二進制數據等
網頁解析方式:
直接處理
JSon解析
正則表達式
BeautifulSoup
XPath
PyQuery
解決JavaScript渲染問題
分析Ajax請求
selenium/WebDriver
Splash
PyV8,Ghost.py
前期準備工作
主要分爲三個部分進行,python的安裝,數據庫的安裝,爬蟲常用庫的安裝
-
python的安裝:採用anaconda進行,anaconda相當於是一個肯德基全家桶,一次性安裝python和相關的庫
注意點:
如果你的電腦裏有python2,python3,會面臨python衝突的問題。需要將python.exe的名稱,然後將其所在文件夾添加到環境變量。
-
數據庫的安裝
-
非關係型數據庫MongoDB安裝:
- 谷歌搜索MongoDB,下載安裝MongoDB
- 在MongoDB根目錄下,創建data文件夾,然後在data文件夾裏面新建db文件夾
- 在bin文件夾下,打開命令行,輸入’mongod --dbpath bin文件夾’
- 然後在data文件夾下新建logs文件夾,並在logs文件夾下新建mongo.log文件(這是一個日誌文件)
- 然後在這個logs文件夾下,打開命令行,輸入’mongod --bind_ip 0.0.0.0 --logpath log文件的路徑(包括文件名) --logappend --dbpath db文件夾 --port 27017 --serviceName “MongoDB” --serviceplayName “MongoDB” --install’
- 然後可以在計算機管理器中將mongoDB打開
- 下載Robomongo(這是MongoDB的可視化界面)
-
Redis安裝
- Redis是一個開源的,內存中的數據結構存儲系統,可以用來用作數據庫、緩存和信息中間件。
- 在github上下載Redis desktop安裝數據庫可視化界面
- 用於維護非關係數據爬取
-
MySQL的安裝
- 首先安裝MySQL,可以參考這個博客
- 爬蟲常用庫的安裝
-
Requests庫詳解
-
Scrapy安裝詳解
-
BeautifulSoup安裝詳解
-
Selenium安裝詳解
-
PhantomJs安裝詳解
-
lxml安裝詳解
-
pymysql安裝詳解:
-
pymongo安裝詳解:
-
flask安裝詳解:
-
django安裝詳解: