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