一、簡單爬蟲架構
簡單爬蟲架構
運行流程
運行流程.png
1、調度器詢問URL管理器,是否有待爬URL?URL管理器返回是/否;
2、如果是,調度器會從URL管理器中取出一個待爬URL;
3、調度器將URL傳給下載器,下載網頁內容後返回給調度器;
4、調度器再將返回的網頁內容發送到解析器,解析URL內容,解析完成後返回有價值的數據和新的URL;
5、一方面,調度器將數據傳遞給應用進行數據的收集;另一方面,會將新的URL補充進URL管理器,若有URL管理器中含有新的URL,則重複上述步驟,直到爬取完所有的URL
6、最後,調度器會調動應用的方法,將價值數據輸出到需要的格式。
二、URL管理器和實現方法
防止重複抓取、防止循環抓取
URL管理器功能.png
支持的功能
添加新URL到待爬取集合中
判斷待添加的URL是否在容器中
判斷是否還有帶待爬取URL
獲取待爬取URL
將URL從待爬取移動到已爬取
實現方式
實現方式.png
將待爬取的URL和已爬取的URL存放在內容中。
將URL存放在關係型數據中
將URL存儲在緩存資料庫中
三、網頁下載器和urllib2模塊
網頁下載器類似於瀏覽器,會將網際網路對應的網頁以HTML的形式下載到本地,存儲成本地文件或內存字符串,然後進行後續的分析。
Python的網頁下載器
urllib2 (Python3以後將urllib2替換為urllib.request)
requests
urllib2
方法1:給定url,使用urllib2模塊的urlopen方法。
方法2:添加data,http header
向伺服器提交http的頭信息,形成一個data,可以向伺服器提交需要用戶輸入的數據。
添加頭信息
方法3:添加特殊情景的處理器
不同情景.png
比如需要登錄才能訪問的網頁,要添加cookie的處理。使用HTTPCookieProcessor;
需要代理才能訪問的網頁使用ProxyHandler;
需要HTTPS加密訪問的網站使用HTTPSHandler;
有些URL存在相互自動跳轉的關係使用HTTPRedirectHandler進行處理。
將這些Handler傳送給urllib2的build_opener方法創建一個opener對象,再傳給urllib2的install_opener方法,urllib2這個模塊就具備了進行特殊情景處理的能力。
四、網頁解析器和BeautifulSoup
網頁解析器從HTML網頁字符串中提取出價值數據和新URL對象。
Python網頁解析器
正則表達式
html.parser
Beautiful Soup
lxml
後面三種是以結構化解析的方式進行解析DOM(Document Object Model)樹
DOM樹
Beautiful Soup
Python第三方庫,用於從HTML或XML中提取數據
官網:https://www.crummy.com/software/BeautifulSoup/
中文文檔:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html
安裝測試
語法
BeautifulSoup語法.png
訪問節點信息
五、實戰練習
開發爬蟲的步驟
開發爬蟲步驟
python語言基礎:(帶你熟悉python語言的特性,學會使用python開發環境,使用python開發一些簡單的案例)
(1)Python3入門,數據類型,字符串
(2)判斷/循環語句,函數,
(3)類與對象,繼承,多態
(4)tkinter界面編程
(5)文件與異常,數據處理簡介
(6)Pygame實戰飛機大戰
python語言高級:(python語言的高級庫,常用的企業級開發案例實戰)
(1)Python常見第三方庫與網絡編程
(2)面向對象,Python正則表達式
(3)求職數據爬蟲,金融數據爬蟲,多線程爬蟲
(4)Python線程、進程
(5)Python mysql資料庫應用,Nosql資料庫,sql,jython
python全棧工程師前端 (學會開發前端網頁,會使用流行的前端框架)
(1) HTML+css
(5) 網頁界面設計實戰
(6) javaScript+ajax
(7) jquerry
(8) jquerry EasyUI, Mobile簡介,photoshop
(9) Bootstrap
python全棧工程師後端 (常用的後端架構和企業項目實戰)
(1) Django入門
(2) Django高級
(3) Django實戰
(4) Flask開發原理
(5) Flask開發項目實踐
(6) Tornado開發原理
(7) Tornado開發項目實踐
Linux基礎 (linux入門,和python結合可以找linux+python運維的工作)
(1)虛擬機安裝
(2)linux伺服器安裝與配置
(3)apache伺服器與nginx伺服器安裝與使用
(4)linux常用伺服器命令
(5)Python-WEB伺服器運行環境與配置
(6)版本管理工具svn
(7)版本管理工具git
(8)程序部署與網站遷移
Linux運維自動化開發 (Linux中比較深度的案例和實戰)
(1) Python開發Linux運維
(2) Linux運維報警工具開發
(3) Linux運維報警安全審計開發
(4) Linux業務質量報表工具開發
(5) Kali安全檢測工具檢測
(6) Kali 密碼破解實戰
python數據分析 (分析爬蟲抓取的數據,分析規律,用於商業化)
(1) numpy數據處理
(2) pandas數據分析
(3) matplotlib數據可視化
(4) scipy數據統計分析
(5) python 金融數據分析
python大數據 (Python操作大數據很方便)
(1) Hadoop HDFS
(2) python Hadoop MapReduce
(3) python Spark core
(4) python Spark SQL
(5) python Spark MLlib
python機器學習 (機器學習的一些入門概念和案例,python支持很多機器學習的框架)
(1) 機器學習基礎知識簡介
(2) KNN算法
(3) 線性回歸
(4) 邏輯斯蒂回歸算法
(5) 決策樹算法
(6) 樸素貝葉斯算法
(7) 支持向量機
(8) 聚類k-means算法