什麼是爬蟲?
網絡爬蟲(Web crawler),就是通過網址獲得網絡中的數據、然後根據目標解析數據、存儲目標信息。這個過程可以自動化程序實現,行為類似一個蜘蛛。蜘蛛在網際網路上爬行,一個一個網頁就是蜘蛛網。這樣蜘蛛可以通過一個網頁爬行到另外一個網頁。
網絡爬蟲也是獲取數據的一個途徑。對於大數據行業,數據的價值不言而喻,在這個信息爆炸的年代,網際網路上有太多的信息數據,對於中小微公司,合理利用爬蟲爬取有價值的數據,是彌補自身先天數據短板的不二選擇。
根據上面的分析,我們可以把網絡爬蟲分為四步:
獲取網頁數據
解析網頁數據
存儲網頁數據
分析網頁數據
第一步: 獲取網頁數據
獲取網頁數據,也就是通過網址( URL:Uniform Resource Locator,統一資源 定位符),獲得網絡的數據,充當搜尋引擎。當輸入網址,我們就相當於對網址伺服器發送了一個請求,網站伺服器收到以後,進行處理和解析,進而給我們一個相應的相應。如果網絡正確並且網址不錯,一般都可以得到網頁信息,否則告訴我們一個錯誤代碼,比如404. 整個過程可以稱為請求和響應。
常見的請求方法有兩種,GET和 POST。GET請求是把參數包含在了url裡面,比如在百度裡面輸入爬蟲,得到一個get 請求,連結為 https://www.baidu.com/s?wd=爬蟲。而post請求大多是在表單裡面進行,也就是讓你輸入用戶名和秘密,在url裡面沒有體現出來,這樣更加安全。post請求的大小沒有限制,而get請求有限制,最多1024個字節。
在python程序裡面,上述過程可以通過獲取網頁中的原始碼實現,進而獲得網頁中的數據。首先看一下網址的原始碼查看方法,使用google瀏覽器,右鍵選擇檢查,查看需要爬取的網址原始碼,具體如下:從圖可得知,在Network選項卡裡面,點擊第一個條目,也就是www.baidu.com,看到原始碼。
在本圖中,第一部分是General,包括了網址的基本信息,比如狀態 200等,第二部分是Response Headers,包括了請求的應答信息,還有body部分,比如Set-Cookie,Server等。第三部分是,Request headers,包含了伺服器使用的附加信息,比如Cookie,User-Agent等內容。
上面的網頁原始碼,在python語言中,我們只需要使用urllib、requests等庫實現即可,具體如下。這裡特別說明一些,requests比urllib更加方便、快捷。一旦學會requests庫,肯定會愛不釋手。
import urllib.request
import socket
from urllib import error
try:
response = urllib.request.urlopen('https://www.python.org')
print(response.status)
print(response.read().decode('utf-8'))
except error.HTTPError as e:
print(e.reason,e.code,e.headers,sep='\n')
except error.URLError as e:
print(e.reason)
else:
print('Request Successfully')
第二步:解析網頁數據
在第一步,我們獲得了網頁的原始碼,也就是數據。然後就是解析裡面的數據,為我們的分析使用。常見的方法有很多,比如正則表達式、xpath解析等。
在Python語言中,我們經常使用Beautiful Soup、pyquery、lxml等庫,可以高效的從中獲取網頁信息,如節點的屬性、文本值等。
Beautiful Soup庫是解析、遍歷、維護「標籤樹」的功能庫,對應一個HTML/XML文檔的全部內容。安裝方法非常簡單,如下:
#安裝方法
pips install beautifulsoup4
#驗證方法
from bs4 import BeautifulSoup
第三步:存儲網頁數據
解析完數據以後,就可以保存起來。如果不是很多,可以考慮保存在txt 文本、csv文本或者json文本等,如果爬取的數據條數較多,我們可以考慮將其存儲到資料庫中。因此,我們需要學會 MySql、MongoDB、SqlLite的用法。更加深入的,可以學習資料庫的查詢優化。
JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。它基於ECMAScript的一個子集。 JSON採用完全獨立於語言的文本格式,但是也使用了類似於C語言家族的習慣(包括C、C++、Java、JavaScript、Perl、Python等)。這些特性使JSON成為理想的數據交換語言。易於人閱讀和編寫,同時也易於機器解析和生成(一般用於提升網絡傳輸速率)。
JSON在python中分別由list和dict組成。Python官方json網址是 https://docs.python.org/3/library/json.html?highlight=json#module-json
具體使用方法如下:
with open('douban_movie_250.csv','a',encoding='utf-8') as f:
f.write(json.dumps(content,ensure_ascii=False)+'\n')
第四步:分析網頁數據
爬蟲的目的是分析網頁數據,進的得到我們想要的結論。在 python數據分析中,我們可以使用使用第三步保存的數據直接分析,主要使用的庫如下:NumPy、Pandas、 Matplotlib 三個庫。
NumPy :它是高性能科學計算和數據分析的基礎包。
Pandas : 基於 NumPy 的一種工具,該工具是為了解決數據分析任務而創建的。它可以算得上作弊工具。
Matplotlib:Python中最著名的繪圖系統Python中最著名的繪圖系統。它可以製作出散點圖,折線圖,條形圖,直方圖,餅狀圖,箱形圖散點圖,折線圖,條形圖,直方圖,餅狀圖,箱形圖等。
掃描加入更多Python實戰
世界500強程式設計師帶你飛
已有1300+加入,與您共同學習。
【基礎】0基礎學python,24小時有人快速解答問題;
【提高】40多個項目實戰,有基礎的可以從真實場景中學習python;
【點評】圈主認真細緻作業點評,重量嘉賓幫助解答問題
【分享】優質python學習資料分享,讓你在最短時間獲得有價值的學習資源;圈友優質資料或學習分享,會不時給予讚賞支持,希望每個優質圈友既能賺回加入費用,也能快速成長,並享受分享與幫助他人的樂趣。
【人脈】已有1300+加入收穫一群志同道合的朋友並且都是python從業者
【價格】本著布道思想,只需 70元 加入一個能保證學習效果的良心圈子
長按下圖二維碼,了解python實戰圈詳情。