大一的時(shí)候,有一門課(Programming Techniques & Tools)教了好多雜七雜八的東西:各種IDE扯旷,Linux,C語言基礎(chǔ)拆挥,一些常見數(shù)據(jù)結(jié)構(gòu)薄霜,STL庫某抓,還有Python纸兔。那個(gè)時(shí)候剛學(xué)完C++,看見Python就像是看見了一個(gè)新的世界:整齊的代碼格式否副,沒有眼花繚亂的大括號汉矿,沒有variable declaration,好靈活簡單“好學(xué)”的一門語言(那時(shí)真是拿衣服了备禀。洲拇。)!那門課教授在Lab里教我們用Python做了一個(gè)腳本可以用別人的email發(fā)給另一個(gè)人郵件曲尸,而且就是短短的幾行代碼而已赋续!當(dāng)時(shí)感覺這么六啊,Python一定得學(xué)好~
由于當(dāng)時(shí)學(xué)Python時(shí)間不長(不到一學(xué)期的一半)另患,所以學(xué)習(xí)的也不深纽乱,今年暑假在家閑著沒事,又對網(wǎng)絡(luò)爬蟲很感興趣昆箕,想用Python做幾個(gè)爬蟲小項(xiàng)目鸦列。于是重新拾起Python租冠,一邊讀《Learning Python》一邊碼代碼做練習(xí),算是把基礎(chǔ)又打了一遍(依然覺得代碼還是很整潔薯嗤,很喜歡這種風(fēng)格)顽爹。然后就開始琢磨著開始爬蟲啦!
什么是網(wǎng)絡(luò)爬蟲呢骆姐?
隨著互聯(lián)網(wǎng)的發(fā)展镜粤,人們在各種網(wǎng)絡(luò)行為中產(chǎn)生了無數(shù)的數(shù)據(jù):圖片、音頻玻褪、用戶信息等各種數(shù)據(jù)充斥著當(dāng)今的互聯(lián)網(wǎng)世界繁仁。盡管Google、百度等等搜索引擎提供了獲取用戶想要的信息的途徑归园,但是往往有很多不相干的網(wǎng)頁混雜其中黄虱。這個(gè)時(shí)候,有效的網(wǎng)絡(luò)爬蟲就起到了重要的作用庸诱。如果把網(wǎng)絡(luò)爬蟲比作把一只蜘蛛放到一張網(wǎng)上捻浦,然后他可以獲取網(wǎng)上的信息,是不是就形象了呢桥爽?來讓我們看看網(wǎng)絡(luò)爬蟲的定義:
“網(wǎng)絡(luò)爬蟲(又被稱為網(wǎng)頁蜘蛛朱灿,網(wǎng)絡(luò)機(jī)器人,在FOAF社區(qū)中钠四,更經(jīng)常的被稱為網(wǎng)頁追逐著)盗扒,是一種按照一定的規(guī)則,自動(dòng)抓取萬維網(wǎng)信息的程序或者腳本缀去。另外一些不常使用的名字還有螞蟻侣灶、自動(dòng)索引、模擬程序或者蠕蟲缕碎∪煊埃” ——取自百度百科
爬蟲的實(shí)質(zhì)
爬蟲的實(shí)質(zhì)就是模擬瀏覽器打開網(wǎng)頁,獲取網(wǎng)頁中我們想要的那些數(shù)據(jù)咏雌。當(dāng)你輸給瀏覽器地址時(shí)凡怎,經(jīng)過DNS服務(wù)器找到服務(wù)器主機(jī),向服務(wù)器發(fā)送一個(gè)請求赊抖,服務(wù)器經(jīng)過解析之后再發(fā)送給瀏覽器結(jié)果统倒,包括html、js氛雪、css等文件內(nèi)容房匆,瀏覽器在解析之后再呈獻(xiàn)給用戶在瀏覽器上看到的結(jié)果。實(shí)際上呢,給用戶看到在瀏覽器的結(jié)果就是由html代碼構(gòu)成的坛缕,負(fù)責(zé)展示墓猎,我們爬蟲就是為了獲取這些內(nèi)容,通過分析和過濾html代碼赚楚,從中獲取我們想要的資源:URL毙沾,文本,圖片宠页,音頻等等左胞。
爬蟲的基本流程
發(fā)起請求:通過HTTP庫向目標(biāo)站點(diǎn)發(fā)起請求,也就是發(fā)送一個(gè)request举户,請求可以包含額外的header等信息烤宙,等待服務(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á)式叉瘩,頁面解析庫進(jìn)行解析,可能是Json粘捎,可以直接轉(zhuǎn)換為Json對象解析薇缅,可能是二進(jìn)制數(shù)據(jù),可以做保存或者進(jìn)一步處理攒磨。
保存數(shù)據(jù):保存形式多樣泳桦,可以存為文本,也可以保存到數(shù)據(jù)庫咧纠,或者保存特定格式的文件蓬痒。
Request包含了什么泻骤?
- 請求方式:Get/Post
- 請求URL
- 請求的頭部信息:user-agent漆羔,Host,Cookies等
- 請求體狱掂,即攜帶的數(shù)據(jù)
Response包含了什么演痒?
- 響應(yīng)狀態(tài):200代表成功,301是跳轉(zhuǎn)趋惨,404Not Found鸟顺,502服務(wù)器錯(cuò)誤
- 響應(yīng)頭
- 響應(yīng)體:如html、圖片、二進(jìn)制數(shù)據(jù)
能爬取什么數(shù)據(jù)讯嫂?
- 網(wǎng)頁文本
- 圖片
- 視頻
- 其他可以請求到的
如何解析數(shù)據(jù):
- 直接處理
- Json解析
- 正則表達(dá)式解析
- BeautifulSoup解析處理
- PyQuery解析處理
- XPath解析處理