彭莉
引言
Python是一種面向?qū)ο?、解釋型、帶有動態(tài)語義的高級程序設(shè)計語言,其語法簡潔清晰,具有豐富和強大的類庫。Python語言支持覆蓋信息技術(shù)各領(lǐng)域的10萬個函數(shù)庫,依靠開源快速開發(fā),形成了全球最大的編程社區(qū)。
基于Python的爬蟲與其他語言相比的有很多優(yōu)勢,本文主要是對Python爬蟲技術(shù)進行闡述。通過爬去某個網(wǎng)站的所有新聞這個案例,來進一步闡釋Python爬蟲技術(shù)的簡潔。
一、爬蟲的概念
網(wǎng)絡(luò)爬蟲(也稱為網(wǎng)絡(luò)蜘蛛、網(wǎng)絡(luò)機器人,在FOAF社區(qū)中,更常被稱為網(wǎng)絡(luò)追逐者)是根據(jù)某些規(guī)則自動從萬維網(wǎng)獲取信息的程序或腳本,不常用的其他名稱包括螞蟻、自動索引、仿真程序或蠕蟲。
二、爬蟲的基本流程
發(fā)起請求:通過HTTP庫向目標(biāo)站點發(fā)起請求,即發(fā)送一個Request,請求可以包含額外的headers等信息,等待服務(wù)器響應(yīng)。
獲取響應(yīng)內(nèi)容:如果服務(wù)器能正常響應(yīng),會得到一個Response,Response的內(nèi)容便是所要獲取的頁面內(nèi)容,類型可能有HTML、Json字符串、二進制數(shù)據(jù)(如圖片視頻)等類型。
解析內(nèi)容:得到的內(nèi)容可能是HTML,可以用正則表達(dá)式、網(wǎng)頁解析庫進行解析。可能是Json,可以直接轉(zhuǎn)為Json對象解析,可能是二進制數(shù)據(jù),可以做保存或者進一步的處理。
保存數(shù)據(jù):保存形式多樣,可以存為文本,也可以保存至數(shù)據(jù)庫,或者保存特定格式的文件。
(一)Request和Response
Request:瀏覽器就發(fā)送消息給該網(wǎng)址所在的服務(wù)器,這個過程叫做HTTPRequest。Response:服務(wù)器收到瀏覽器發(fā)送的消息后,能夠根據(jù)瀏覽器發(fā)送消息的內(nèi)容,做相應(yīng)處理,然后把消息回傳給瀏覽器。這個過程叫作HTTPResponse。瀏覽器收到服務(wù)器的Response信息后,會對信息進行相應(yīng)處理,然后展示。
(二)抓取數(shù)據(jù)類型
網(wǎng)頁文本:如HqTVIL文檔、Json格式文本等。圖片:獲取到的是二進制文件,保存為圖片格式。視頻:同為二進制文件,保存為視頻格式即可。And so on:只要是能請求到的,都能獲取。
(三)解析方式
直接處理,Json解析,正則表達(dá)式,BeautifulSoup庫PyQuery庫和XPath庫。
(四)保存數(shù)據(jù)
文本:純文本、Json、Xml等。關(guān)系型數(shù)據(jù)庫:如MySQL、Oracle、SQL Server等具有結(jié)構(gòu)化表結(jié)構(gòu)形式存儲。非關(guān)系型數(shù)據(jù)庫:如MongoDB、Redis等Key-Value形式存儲。二進制文件:如圖片、視頻、音頻等等直接保存成特定格式即可。
三、案例:爬取某個網(wǎng)站股票信息