python3爬蟲修煉手冊(cè)-Part1

1.1秘症、爬蟲分類
(1)通用爬蟲
通常是對(duì)搜索引擎的內(nèi)容,全部爬取下來爬范,速度較快
(2)聚焦爬蟲
聚焦爬蟲的工作流程較為復(fù)雜邦危,需要根據(jù)一定的網(wǎng)頁分析算法過濾與主題無關(guān)的鏈接洋侨,保留有用的鏈接并將其放入等待抓取的URL隊(duì)列。然后倦蚪,它將根據(jù)一定的搜索策略從隊(duì)列中選擇下一步要抓取的網(wǎng)頁URL希坚,并重復(fù)上述過程,直到達(dá)到系統(tǒng)的某一條件時(shí)停止

1.2 爬蟲的工作原理
Web網(wǎng)絡(luò)爬蟲系統(tǒng)的功能是下載網(wǎng)頁數(shù)據(jù)陵且,為搜索引擎系統(tǒng)提供數(shù)據(jù)來源裁僧。很多大型的網(wǎng)絡(luò)搜索引擎系統(tǒng)都被稱為基于 Web數(shù)據(jù)采集的搜索引擎系統(tǒng)个束,比如 Google、Baidu聊疲。由此可見Web 網(wǎng)絡(luò)爬蟲系統(tǒng)在搜索引擎中的重要性茬底。網(wǎng)頁中除了包含供用戶閱讀的文字信息外,還包含一些超鏈接信息获洲。Web網(wǎng)絡(luò)爬蟲系統(tǒng)正是通過網(wǎng)頁中的超連接信息不斷獲得網(wǎng)絡(luò)上的其它網(wǎng)頁阱表。正是因?yàn)檫@種采集過程像一個(gè)爬蟲或者蜘蛛在網(wǎng)絡(luò)上漫游,所以它才被稱為網(wǎng)絡(luò)爬蟲系統(tǒng)或者網(wǎng)絡(luò)蜘蛛系統(tǒng)贡珊,在英文中稱為Spider或者Crawler最爬。


圖片.png

1.3 網(wǎng)絡(luò)爬蟲基本流程
1、發(fā)起請(qǐng)求:通過HTTP庫(如urllib门岔、requests庫)向目標(biāo)網(wǎng)站發(fā)起請(qǐng)求爱致,即發(fā)送一個(gè)Request,請(qǐng)求可以包含額外的headers等信息寒随,等待服務(wù)器響應(yīng)糠悯。
2、獲取響應(yīng)內(nèi)容:如果服務(wù)器能正常響應(yīng)妻往,會(huì)得到一個(gè)Response互艾,Response的內(nèi)容便是所要獲取的頁面內(nèi)容,類型可能有HTML讯泣,Json字符串忘朝,二進(jìn)制數(shù)據(jù)(如圖片視頻)等類型。
3判帮、解析內(nèi)容:得到的內(nèi)容可能是HTML,可以用正則表達(dá)式溉箕、網(wǎng)頁解析庫(Beautifulsoup晦墙、Xpath等)進(jìn)行解析‰惹眩可能是Json晌畅,可以直接轉(zhuǎn)為Json對(duì)象解析,可能是二進(jìn)制數(shù)據(jù)寡痰,可以做保存或者進(jìn)一步的處理抗楔。
4、保存數(shù)據(jù):保存形式多樣拦坠,可以存為文本连躏,也可以保存至數(shù)據(jù)庫(MongoDB/Mysql/Redis等),或者保存特定格式的文件贞滨。

1.4 Request和Response
(1)Request:瀏覽器就發(fā)送消息給該網(wǎng)址所在的服務(wù)器入热,這個(gè)過程叫做HTTP Request。
Request詳解
請(qǐng)求方式:主要有GET、POST兩種類型勺良,另外還有HEAD绰播、PUT、DELETE尚困、OPTIONS等蠢箩。
GET請(qǐng)求和POST請(qǐng)求方式的區(qū)別:
GET 請(qǐng)求中的參數(shù)包含在URL 里面,數(shù)據(jù)可以在URL 中看到事甜,而POST 請(qǐng)求的URL 不會(huì)包
含這些數(shù)據(jù)谬泌,數(shù)據(jù)都是通過表單形式傳輸?shù)模瑫?huì)包含在請(qǐng)求體中讳侨。
GET 請(qǐng)求提交的數(shù)據(jù)最多只有1024 字節(jié)呵萨,而POST 方式?jīng)]有限制。
POST請(qǐng)求一般發(fā)送表單數(shù)據(jù)

請(qǐng)求URL:URL全稱統(tǒng)一資源定位符跨跨,如一個(gè)網(wǎng)頁文檔潮峦、一張圖片、一個(gè)視頻等都可以用URL唯一來確定勇婴。
請(qǐng)求頭:包含請(qǐng)求時(shí)的頭部信息忱嘹,如User-Agent、Host耕渴、Cookies等信息拘悦。
請(qǐng)求體:請(qǐng)求時(shí)額外攜帶的數(shù)據(jù)如表單提交時(shí)的表單數(shù)據(jù)。

(2)Response:服務(wù)器收到瀏覽器發(fā)送的消息后橱脸,能夠根據(jù)瀏覽器發(fā)送消息的內(nèi)容础米,做相應(yīng)處理,然后把消息回傳給瀏覽器添诉。這個(gè)過程叫做HTTP Response屁桑。瀏覽器收到服務(wù)器的Response信息后,會(huì)對(duì)信息進(jìn)行相應(yīng)處理栏赴,然后展示蘑斧。
Response詳解
響應(yīng)狀態(tài):有多種響應(yīng)狀態(tài),如200代表成功须眷、301跳轉(zhuǎn)竖瘾、404找不到頁面、502服務(wù)器錯(cuò)誤花颗。
響應(yīng)頭:如內(nèi)容類型捕传、內(nèi)容長(zhǎng)度、服務(wù)器信息扩劝、設(shè)置Cookie等等乐横。
響應(yīng)體:最主要的部分求橄,包含了請(qǐng)求資源的內(nèi)容,如網(wǎng)頁HTML葡公、圖片二進(jìn)制數(shù)據(jù)等罐农。
1.5 JavaScript渲染頁面
部分網(wǎng)站在使用urllib或requests抓取網(wǎng)頁時(shí),獲取的源代碼和瀏覽器中看到的不一致催什,源代碼中包含<script src=’xx.js’></script>涵亏,這就是采用了Ajax或者其他模塊化工具構(gòu)建的,整個(gè)網(wǎng)頁都是有JS渲染出來的蒲凶,瀏覽器就會(huì)去請(qǐng)求JS文件气筋。這時(shí)需要分析發(fā)送給后臺(tái)的Ajax接口,也可以使用Selenium旋圆、Splash這樣的庫來模擬JS渲染后的頁面宠默,從而獲取數(shù)據(jù)。后面會(huì)詳細(xì)說明灵巧,如何獲取JS搀矫、Ajax網(wǎng)頁的數(shù)據(jù)。
1.6 會(huì)話和Cookies
有些網(wǎng)站需要登錄之后才能抓取數(shù)據(jù)刻肄,如豆瓣這些網(wǎng)站瓤球。

這時(shí)兩個(gè)用于保持HTTP 連接狀態(tài)的技術(shù)就出現(xiàn)了,它們分別是會(huì)話和Cookies 敏弃。會(huì)話在服務(wù)端卦羡,
也就是網(wǎng)站的服務(wù)器,用來保存用戶的會(huì)話信息麦到; Cookies 在客戶端绿饵,也可以理解為瀏覽器端,有了Cookies 瓶颠,瀏覽器在下次訪問網(wǎng)頁時(shí)會(huì)自動(dòng)附帶上它發(fā)送給服務(wù)器蝴罪,服務(wù)器通過識(shí)別Cookjes 并鑒定出是哪個(gè)用戶,然后再判斷用戶是否是登錄狀態(tài)步清,然后返回對(duì)應(yīng)的響應(yīng)。
我們可以理解為Cookies 里面保存了登錄的憑證指黎,有了它港庄,只需要在下次請(qǐng)求攜帶Cookies 發(fā)送
請(qǐng)求而不必重新輸入用戶名梯浪、密碼等信息重新登錄了。
因此在爬蟲中谴轮,有時(shí)候處理需要登錄才能訪問的頁面時(shí),我們一般會(huì)直接將登錄成功后獲取的
Cookies 放在請(qǐng)求頭里面直接請(qǐng)求吹埠,而不必重新模擬登錄第步。
1.7 爬蟲代理
由于單個(gè)IP請(qǐng)求某個(gè)網(wǎng)站的訪問次數(shù)太多疮装,會(huì)出現(xiàn)403的錯(cuò)誤,這種情況稱為封IP粘都。這時(shí)需要用到代理IP廓推。

1.7.1 基本原理
代理實(shí)際上指的就是代理服務(wù)器,英文叫作proxy server 翩隧,它的功能是代理網(wǎng)絡(luò)用戶去取得網(wǎng)絡(luò)信
息樊展。形象地說,它是網(wǎng)絡(luò)信息的中轉(zhuǎn)站堆生。在我們正常請(qǐng)求一個(gè)網(wǎng)站時(shí)专缠, 是發(fā)送了請(qǐng)求給Web 服務(wù)器,Web 服務(wù)器把響應(yīng)傳回給我們淑仆。如果設(shè)置了代理服務(wù)器涝婉, 實(shí)際上就是在本機(jī)和服務(wù)器之間搭建了一個(gè)橋, 此時(shí)本機(jī)不是直接向Web 服務(wù)器發(fā)起請(qǐng)求蔗怠,而是向代理服務(wù)器發(fā)出請(qǐng)求墩弯,請(qǐng)求會(huì)發(fā)送給代理服務(wù)器,然后由代理服務(wù)器再發(fā)送給Web 服務(wù)器蟀淮,接著由代理服務(wù)器再把Web 服務(wù)器返回的響應(yīng)轉(zhuǎn)發(fā)給本機(jī)最住。這樣我們同樣可以正常訪問網(wǎng)頁,但這個(gè)過程中Web 服務(wù)器識(shí)別出的真實(shí)IP 就不再是我們本機(jī)的IP 了怠惶,就成功實(shí)現(xiàn)了IP 偽裝涨缚,這就是代理的基本原理。

1.7.2 常見代理設(shè)置
(1)使用網(wǎng)上免費(fèi)的代理:最好使用高匿代理策治,需要在使用前篩選下可用代理脓魏,也可以進(jìn)一步維護(hù)一個(gè)代理池。
(2)付費(fèi)代理服務(wù):通過代理商通惫,付費(fèi)使用

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末茂翔,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子履腋,更是在濱河造成了極大的恐慌珊燎,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,406評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遵湖,死亡現(xiàn)場(chǎng)離奇詭異悔政,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)延旧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門谋国,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人迁沫,你說我怎么就攤上這事芦瘾“莆茫” “怎么了?”我有些...
    開封第一講書人閱讀 167,815評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵近弟,是天一觀的道長(zhǎng)缅糟。 經(jīng)常有香客問我,道長(zhǎng)藐吮,這世上最難降的妖魔是什么溺拱? 我笑而不...
    開封第一講書人閱讀 59,537評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮谣辞,結(jié)果婚禮上迫摔,老公的妹妹穿的比我還像新娘。我一直安慰自己泥从,他們只是感情好句占,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著躯嫉,像睡著了一般纱烘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上祈餐,一...
    開封第一講書人閱讀 52,184評(píng)論 1 308
  • 那天擂啥,我揣著相機(jī)與錄音,去河邊找鬼帆阳。 笑死哺壶,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蜒谤。 我是一名探鬼主播山宾,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼鳍徽!你這毒婦竟也來了资锰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,668評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤阶祭,失蹤者是張志新(化名)和其女友劉穎绷杜,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體濒募,經(jīng)...
    沈念sama閱讀 46,212評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鞭盟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了萨咳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,438評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡疫稿,死狀恐怖培他,靈堂內(nèi)的尸體忽然破棺而出鹃两,到底是詐尸還是另有隱情,我是刑警寧澤舀凛,帶...
    沈念sama閱讀 36,128評(píng)論 5 349
  • 正文 年R本政府宣布俊扳,位于F島的核電站,受9級(jí)特大地震影響猛遍,放射性物質(zhì)發(fā)生泄漏馋记。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評(píng)論 3 333
  • 文/蒙蒙 一懊烤、第九天 我趴在偏房一處隱蔽的房頂上張望梯醒。 院中可真熱鬧,春花似錦腌紧、人聲如沸茸习。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽号胚。三九已至,卻和暖如春浸遗,著一層夾襖步出監(jiān)牢的瞬間猫胁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工跛锌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留弃秆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,827評(píng)論 3 376
  • 正文 我出身青樓察净,卻偏偏與公主長(zhǎng)得像驾茴,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子氢卡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 可能是你當(dāng)人家為傻子锈至,但背后的一套是再精明的面具,摘下來译秦,依舊是丑陋的面孔峡捡。 寧愿不知人,不知面筑悴,更不要知心
    咳咳的突西閱讀 177評(píng)論 0 0
  • 這幾天沒畫畫们拙,咱們來嘮嘮嗑吧!今天聊啥阁吝?來點(diǎn)歐洲史吧砚婆,好的!就這么愉快的決定了 “歷史”太豐富太神秘的一種存在,所...
    S繪生活閱讀 1,354評(píng)論 2 2
  • 人愛歇斯底里 然后歸于平靜 反正大家都是大差不差的吧 對(duì)于世事的反應(yīng)大抵相同 別人的生活總是羨慕 自己的人生卻愛唏...
    我很喜歡我的頭像閱讀 325評(píng)論 0 0