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