Python爬蟲實戰(zhàn) | 只需 “4步” 入門網絡爬蟲(有福利哦)

什么是爬蟲?
網絡爬蟲(Web crawler),就是通過網址獲得網絡中的數(shù)據(jù)、然后根據(jù)目標解析數(shù)據(jù)、存儲目標信息。這個過程可以自動化程序實現(xiàn),行為類似一個蜘蛛。蜘蛛在互聯(lián)網上爬行,一個一個網頁就是蜘蛛網。這樣蜘蛛可以通過一個網頁爬行到另外一個網頁。

網絡爬蟲也是獲取數(shù)據(jù)的一個途徑。對于大數(shù)據(jù)行業(yè),數(shù)據(jù)的價值不言而喻,在這個信息爆炸的年代,互聯(lián)網上有太多的信息數(shù)據(jù),對于中小微公司,合理利用爬蟲爬取有價值的數(shù)據(jù),是彌補自身先天數(shù)據(jù)短板的不二選擇。
根據(jù)上面的分析,我們可以把網絡爬蟲分為四步:
獲取網頁數(shù)據(jù)
解析網頁數(shù)據(jù)
存儲網頁數(shù)據(jù)
分析網頁數(shù)據(jù)
第一步:獲取網頁數(shù)據(jù)
獲取網頁數(shù)據(jù),也就是通過網址( URL:Uniform Resource Locator,統(tǒng)一資源 定位符),獲得網絡的數(shù)據(jù),充當搜索引擎。當輸入網址,我們就相當于對網址服務器發(fā)送了一個請求,網站服務器收到以后,進行處理和解析,進而給我們一個相應的相應。如果網絡正確并且網址不錯,一般都可以得到網頁信息,否則告訴我們一個錯誤代碼,比如404. 整個過程可以稱為請求和響應。
常見的請求方法有兩種,GET和 POST。GET請求是把參數(shù)包含在了url里面,比如在百度里面輸入爬蟲,得到一個get 請求,鏈接為 https://www.baidu.com/s?wd=爬蟲。而post請求大多是在表單里面進行,也就是讓你輸入用戶名和秘密,在url里面沒有體現(xiàn)出來,這樣更加安全。post請求的大小沒有限制,而get請求有限制,最多1024個字節(jié)。

在python程序里面,上述過程可以通過獲取網頁中的源代碼實現(xiàn),進而獲得網頁中的數(shù)據(jù)。首先看一下網址的源代碼查看方法,使用google瀏覽器,右鍵選擇檢查,查看需要爬取的網址源代碼,具體如下:從圖可得知,在Network選項卡里面,點擊第一個條目,也就是www.baidu.com,看到源代碼。
在本圖中,第一部分是General,包括了網址的基本信息,比如狀態(tài) 200等,第二部分是Response Headers,包括了請求的應答信息,還有body部分,比如Set-Cookie,Server等。第三部分是,Request headers,包含了服務器使用的附加信息,比如Cookie,User-Agent等內容。

上面的網頁源代碼,在python語言中,我們只需要使用urllib、requests等庫實現(xiàn)即可,具體如下。這里特別說明一些,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')
第二步:解析網頁數(shù)據(jù)
在第一步,我們獲得了網頁的源代碼,也就是數(shù)據(jù)。然后就是解析里面的數(shù)據(jù),為我們的分析使用。常見的方法有很多,比如正則表達式、xpath解析等。
在Python語言中,我們經常使用Beautiful Soup、pyquery、lxml等庫,可以高效的從中獲取網頁信息,如節(jié)點的屬性、文本值等。
Beautiful Soup庫是解析、遍歷、維護“標簽樹”的功能庫,對應一個HTML/XML文檔的全部內容。安裝方法非常簡單,如下:
#安裝方法
pips install beautifulsoup4
#驗證方法
from bs4 import BeautifulSoup
第三步:存儲網頁數(shù)據(jù)
解析完數(shù)據(jù)以后,就可以保存起來。如果不是很多,可以考慮保存在txt 文本、csv文本或者json文本等,如果爬取的數(shù)據(jù)條數(shù)較多,我們可以考慮將其存儲到數(shù)據(jù)庫中。因此,我們需要學會 MySql、MongoDB、SqlLite的用法。更加深入的,可以學習數(shù)據(jù)庫的查詢優(yōu)化。
JSON(JavaScript Object Notation) 是一種輕量級的數(shù)據(jù)交換格式。它基于ECMAScript的一個子集。JSON采用完全獨立于語言的文本格式,但是也使用了類似于C語言家族的習慣(包括C、C++、Java、JavaScript、Perl、Python等)。這些特性使JSON成為理想的數(shù)據(jù)交換語言。易于人閱讀和編寫,同時也易于機器解析和生成(一般用于提升網絡傳輸速率)。
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')
第四步:分析網頁數(shù)據(jù)
??爬蟲的目的是分析網頁數(shù)據(jù),進的得到我們想要的結論。在 python數(shù)據(jù)分析中,我們可以使用使用第三步保存的數(shù)據(jù)直接分析,主要使用的庫如下:NumPy、Pandas、 Matplotlib 三個庫。
NumPy :它是高性能科學計算和數(shù)據(jù)分析的基礎包。
Pandas : 基于 NumPy 的一種工具,該工具是為了解決數(shù)據(jù)分析任務而創(chuàng)建的。它可以算得上作弊工具。
Matplotlib:Python中最著名的繪圖系統(tǒng)Python中最著名的繪圖系統(tǒng)。它可以制作出散點圖,折線圖,條形圖,直方圖,餅狀圖,箱形圖散點圖,折線圖,條形圖,直方圖,餅狀圖,箱形圖等。
往期實戰(zhàn)及福利
關注本公眾號,牧原小主?送您
回復“python3.7”,獲得python 3.7官方最新pdf 文檔
2.7G? 380份最新數(shù)據(jù)分析報告
?40G??人工智能算法課
?已關注的小伙伴,直接回復數(shù)據(jù)分析報告、人工智能算法
關注后,回復?PM2.5?獲得?Python分析北京PM2.5,原來每年的值都在變少......
關注后,回復?世界杯, 獲得?2018世界杯來了,利用Python預測冠軍(附全部代碼和數(shù)據(jù)集)
關注后,回復“豆瓣電影“,獲得?Python實戰(zhàn) | 手把手教你爬取豆瓣電影 Top 250(附全部代碼及福利哦)
更多python爬蟲實戰(zhàn),敬請關注期待
感謝您的閱讀,祝您一天好心情!
長按二維碼,關注我們
