八年開(kāi)發(fā)大佬整理的爬蟲(chóng)筆記:三天即可快速學(xué)會(huì)爬蟲(chóng)抵怎!
很多小伙伴在剛接觸編程的時(shí)候不知道什么是爬蟲(chóng),其實(shí)爬蟲(chóng)就是將你在網(wǎng)絡(luò)上所見(jiàn)到的資源批量下載化為己有岭参,操作起來(lái)也是比較簡(jiǎn)單的反惕。小伙伴需要學(xué)習(xí)資料的話加qun 883-441-06小編會(huì)一一發(fā)給大家的。
好了演侯,開(kāi)始今天的主題吧~
一姿染、什么是爬蟲(chóng)
爬蟲(chóng):請(qǐng)求網(wǎng)站并提取數(shù)據(jù)的自動(dòng)化程序
百科:網(wǎng)絡(luò)爬蟲(chóng)(又被稱為網(wǎng)頁(yè)蜘蛛,網(wǎng)絡(luò)機(jī)器人秒际,在FOAF社區(qū)中間悬赏,更經(jīng)常的稱為網(wǎng)頁(yè)追逐者),是一種按照一定的規(guī)則程癌,自動(dòng)地抓取萬(wàn)維網(wǎ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)容椎扬,類型可能有HTML惫搏,Json字符串,二進(jìn)制數(shù)據(jù)(如圖片視頻)等類型蚕涤。
解析內(nèi)容:得到的內(nèi)容可能是HTML筐赔,可以用正則表達(dá)式、網(wǎng)頁(yè)解析庫(kù)進(jìn)行解析揖铜≤罘幔可能是Json,可以直接轉(zhuǎn)為Json對(duì)象解析天吓,可能是二進(jìn)制數(shù)據(jù)贿肩,可以做保存或者進(jìn)一步的處理。
保存數(shù)據(jù):保存形式多樣龄寞,可以存為文本汰规,也可以保存至數(shù)據(jù)庫(kù),或者保存特定格式的文件萄焦。
三控轿、Request和Response
Request:瀏覽器就發(fā)送消息給該網(wǎng)址所在的服務(wù)器,這個(gè)過(guò)程叫做HTTP Request拂封。
Response:服務(wù)器收到瀏覽器發(fā)送的消息后茬射,能夠根據(jù)瀏覽器發(fā)送消息的內(nèi)容,做相應(yīng)處理冒签,然后把消息回傳給瀏覽器在抛。這個(gè)過(guò)程叫做HTTP Response。瀏覽器收到服務(wù)器的Response信息后萧恕,會(huì)對(duì)信息進(jìn)行相應(yīng)處理刚梭,然后展示。
四票唆、Request詳解
請(qǐng)求方式:主要有GET朴读、POST兩種類型,另外還有HEAD走趋、PUT衅金、DELETE、OPTIONS等簿煌。
請(qǐng)求URL:URL全稱統(tǒng)一資源定位符氮唯,如一個(gè)網(wǎng)頁(yè)文檔、一張圖片姨伟、一個(gè)視頻等都可以用URL唯一來(lái)確定惩琉。
請(qǐng)求頭:包含請(qǐng)求時(shí)的頭部信息,如User-Agent夺荒、Host瞒渠、Cookies等信息良蒸。
請(qǐng)求體:請(qǐng)求時(shí)額外攜帶的數(shù)據(jù)如表單提交時(shí)的表單數(shù)據(jù)
五、Response詳解
響應(yīng)狀態(tài):有多種響應(yīng)狀態(tài)伍玖,如200代表成功诚啃、301跳轉(zhuǎn)、404找不到頁(yè)面私沮、502服務(wù)器錯(cuò)誤
響應(yīng)頭:如內(nèi)容類型始赎、內(nèi)容長(zhǎng)度、服務(wù)器信息仔燕、設(shè)置Cookie等等造垛。
響應(yīng)體:最主要的部分,包含了請(qǐng)求資源的內(nèi)容晰搀,如網(wǎng)頁(yè)HTML五辽、圖片二進(jìn)制數(shù)據(jù)等。
六外恕、能抓取哪些數(shù)據(jù)
網(wǎng)頁(yè)文本:如HTML文檔杆逗、Json格式文本等。
圖片:獲取到的是二進(jìn)制文件鳞疲,保存為圖片格式罪郊。
視頻:同為二進(jìn)制文件,保存為視頻格式即可尚洽。
And so on:只要是能請(qǐng)求到的悔橄,都能獲取。
七腺毫、解析方式
直接處理
Json解析
正則表達(dá)式
BeautifulSoup
PyQuery
XPath
八癣疟、抓取中出現(xiàn)的問(wèn)題
問(wèn):為什么我抓到的和瀏覽器看到的不一樣?
答:網(wǎng)頁(yè)通過(guò)瀏覽器的解析潮酒,加載CSS與JS等文件對(duì)網(wǎng)頁(yè)進(jìn)行解析渲染睛挚,達(dá)到我們看到絢麗的網(wǎng)頁(yè),而我們抓到的文件只是一些代碼急黎,css文件無(wú)法調(diào)用扎狱,使得樣式不能表現(xiàn)出來(lái),那么網(wǎng)頁(yè)就會(huì)出現(xiàn)錯(cuò)位等等問(wèn)題叁熔。
問(wèn):怎樣解決JavaScript渲染的問(wèn)題委乌?
答:分析Ajax請(qǐng)求床牧、Selenium/WebDriver荣回、Splash、PyV8戈咳、Ghost.py等庫(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)制文件:
如圖片腐魂、視頻、音頻等等直接保存成特定格式即可逐纬。
文章源自網(wǎng)絡(luò)蛔屹,如有侵權(quán),請(qǐng)聯(lián)系小編刪除豁生。