爬蟲的第一個筆記

1.為什么要學(xué)習(xí)爬蟲?

數(shù)據(jù)的來源

1.企業(yè)生產(chǎn)的用戶數(shù)據(jù)

2.數(shù)據(jù)管理公司

3.政府/機構(gòu)提供的公開數(shù)據(jù)

4.第三方數(shù)據(jù)平臺購買數(shù)據(jù)

5.爬蟲爬數(shù)據(jù)

爬蟲的定義

網(wǎng)絡(luò)爬蟲(又稱為網(wǎng)頁蜘蛛姜盈,網(wǎng)絡(luò)機器人)就是模擬客戶端發(fā)送請求杂抽,接收請求響應(yīng)岳枷,一種按照一定的規(guī)則罚斗,自動抓取互聯(lián)網(wǎng)信息的程序跺株。

爬蟲怎么抓取網(wǎng)頁上的數(shù)據(jù)府喳?

網(wǎng)頁的三大特征:

1.網(wǎng)頁都有自己唯一的URL

2.網(wǎng)頁都是HTML來描述頁面信息

3.網(wǎng)頁都使用HTTP/HTTPS協(xié)議來傳輸HTML數(shù)據(jù)

爬蟲的設(shè)計思路:

1.確定需要爬取的URL地址

2.通過HTTP/HTTPS協(xié)議獲取對應(yīng)的HTML頁面

3.提取HTML頁面有用的數(shù)據(jù)

為什么選擇Python做爬蟲?

簡介肉津,高效妹沙,支持模塊多距糖,HTTP請求和HTML解析的模塊豐富。

調(diào)用其他接口方便恩脂。

2.爬蟲的分類

爬蟲分為:

1.通用爬蟲

2.聚焦爬蟲

通用爬蟲:是搜索引擎抓取系統(tǒng)的重要組成部分没炒,主要目的是將互聯(lián)網(wǎng)上的網(wǎng)頁下載到本地玉凯,形成一個互聯(lián)網(wǎng)的鏡像備份漫仆。

聚焦爬蟲:是“面向特定主題需求”的一種網(wǎng)絡(luò)爬蟲泪幌,它與通用搜索引擎爬蟲的區(qū)別在于:聚焦爬蟲在實施網(wǎng)頁抓取時會對內(nèi)容進行處理篩選祸泪,盡量保證只抓取需求相關(guān)的網(wǎng)頁信息浴滴。

3.HTTP和HTTPS協(xié)議

HTTP協(xié)議簡介

協(xié)議概念:通信計算機雙方必須共同遵守的一組約定升略,只有遵守這個約定品嚣,計算機之間才能相互通信翰撑。

HTTP協(xié)議(HyperText Transfer Protocol,超文本傳輸協(xié)議):是一種發(fā)布和接收HTML頁面的方法瓜饥。

HTTPS協(xié)議(HyperText Transfer Protocol over Secure Socket Layer)簡單講是HTTP的安全版乓土,在HTTP下加入SSL層趣苏。

SSL(?Secure Socket Layer?安全套接層)主要用于web的安全傳輸協(xié)議食磕,在傳輸層對網(wǎng)絡(luò)連接進行加密彬伦,保障Internet上數(shù)據(jù)傳輸安全

HTTP的端口號為80

HTTPS的端口號為443

HTTP的請求與響應(yīng)

HTTP通信由兩部分組成:客戶端請求消息與服務(wù)器響應(yīng)消息

URL:統(tǒng)一資源定位符媚朦,是用于完整地描述Internet上網(wǎng)頁和其他資源的地址一種標(biāo)識。

基本格式:scheme://host[:port#]/path/…/[?query-string][#anchor]

scheme:協(xié)議(例如:http, https, ftp)

host:服務(wù)器的IP地址或者域名

port#:服務(wù)器的端口(如果是走協(xié)議默認端口浙炼,缺省端口80)

path:訪問資源的路徑

query-string:參數(shù)弯屈,發(fā)送給http服務(wù)器的數(shù)據(jù)

anchor:錨(跳轉(zhuǎn)到網(wǎng)頁的指定錨點位置)

客戶端HTTP請求

URL只是標(biāo)識資源的位置,而HTTP是用來提交和獲取資源宴偿≌酰客戶端發(fā)送一個HTTP請求到服務(wù)器的請求消息娩践,包括以下格式:

請求行材泄、請求頭部、空行、請求數(shù)據(jù)

請求方法

根據(jù)HTTP標(biāo)準族檬,HTTP請求可以使用多種請求方法单料。

HTTP 0.9:只有基本的文本 GET 功能。

HTTP 1.0:完善的請求/響應(yīng)模型换怖,并將協(xié)議補充完整,定義了三種請求方法: GET, POST 和 HEAD方法。

HTTP 1.1:在 1.0 基礎(chǔ)上進行更新彻坛,新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法昌屉。

HTTP 2.0(未普及):請求/響應(yīng)首部的定義基本沒有改變,只是所有首部鍵必須全部小寫椰于,而且請求行要獨立為 :method怠益、:scheme、:host瘾婿、:path這些鍵值對蜻牢。

HTTP請求主要分為Get和Post兩種方法

GET是從服務(wù)器上獲取數(shù)據(jù)烤咧,POST是向服務(wù)器傳送數(shù)據(jù)

GET請求參數(shù)顯示,都顯示在瀏覽器網(wǎng)址上抢呆,HTTP服務(wù)器根據(jù)該請求所包含URL中的參數(shù)來產(chǎn)生響應(yīng)內(nèi)容煮嫌,即“Get”請求的參數(shù)是URL的一部分。 例如: http://www.baidu.com/s?wd=Chinese

POST請求參數(shù)在請求體當(dāng)中抱虐,消息長度沒有限制而且以隱式的方式進行發(fā)送昌阿,通常用來向HTTP服務(wù)器提交量比較大的數(shù)據(jù)(比如請求中包含許多參數(shù)或者文件上傳操作等),請求的參數(shù)包含在“Content-Type”消息頭里恳邀,指明該消息體的媒體類型和編碼

常用的請求報頭

1.Host (主機和端口號)

Host:對應(yīng)網(wǎng)址URL中的Web名稱和端口號懦冰,用于指定被請求資源的Internet主機和端口號,通常屬于URL的一部分谣沸。

2.Connection (鏈接類型)

Connection:表示客戶端與服務(wù)連接類型

Client 發(fā)起一個包含 Connection:keep-alive 的請求刷钢,HTTP/1.1使用 keep-alive 為默認值。

Server收到請求后:

如果 Server 支持 keep-alive乳附,回復(fù)一個包含 Connection:keep-alive 的響應(yīng)内地,不關(guān)閉連接;

如果 Server 不支持 keep-alive赋除,回復(fù)一個包含 Connection:close 的響應(yīng)阱缓,關(guān)閉連接。

如果client收到包含 Connection:keep-alive 的響應(yīng)举农,向同一個連接發(fā)送下一個請求荆针,直到一方主動關(guān)閉連接。

3. Upgrade-Insecure-Requests (升級為HTTPS請求)

Upgrade-Insecure-Requests:升級不安全的請求并蝗,意思是會在加載 http 資源時自動替換成 https 請求祭犯,讓瀏覽器不再顯示https頁面中的http請求警報秸妥。

4. User-Agent (瀏覽器名稱)

User-Agent:是客戶瀏覽器的名稱

5. Accept (傳輸文件類型)

Accept:指瀏覽器或其他客戶端可以接受的MIME(Multipurpose Internet Mail Extensions(多用途互聯(lián)網(wǎng)郵件擴展))文件類型滚停,服務(wù)器可以根據(jù)它判斷并返回適當(dāng)?shù)奈募袷健?/p>

Accept: */*:表示什么都可以接收。

Accept:image/gif:表明客戶端希望接受GIF圖像格式的資源粥惧;

Accept:text/html:表明客戶端希望接受html文本键畴。

Accept: text/html, application/xhtml+xml;q=0.9, image/*;q=0.8:表示瀏覽器支持的 MIME 類型分別是 html文本、xhtml和xml文檔突雪、所有的圖像格式資源起惕。

6. Referer (頁面跳轉(zhuǎn)處)

Referer:表明產(chǎn)生請求的網(wǎng)頁來自于哪個URL,用戶是從該 Referer頁面訪問到當(dāng)前請求的頁面咏删。這個屬性可以用來跟蹤Web請求來自哪個頁面惹想,是從什么網(wǎng)站來的等。

7. Accept-Encoding(文件編解碼格式)

Accept-Encoding:指出瀏覽器可以接受的編碼方式督函。編碼方式不同于文件格式嘀粱,它是為了壓縮文件并加速文件傳遞速度激挪。瀏覽器在接收到Web響應(yīng)之后先解碼,然后再檢查文件格式锋叨,許多情形下這可以減少大量的下載時間垄分。

8. Accept-Language(語言種類)

Accept-Langeuage:指出瀏覽器可以接受的語言種類,如en或en-us指英語娃磺,zh或者zh-cn指中文薄湿,當(dāng)服務(wù)器能夠提供一種以上的語言版本時要用到。

9. Accept-Charset(字符編碼)

Accept-Charset:指出瀏覽器可以接受的字符編碼偷卧。

10. Cookie (Cookie)

Cookie:瀏覽器用這個屬性向服務(wù)器發(fā)送Cookie豺瘤。Cookie是在瀏覽器中寄存的小型數(shù)據(jù)體,它可以記載和服務(wù)器相關(guān)的用戶信息

11. Content-Type (POST數(shù)據(jù)類型)

Content-Type:POST請求里用來表示的內(nèi)容類型听诸。

服務(wù)端HTTP響應(yīng)

HTTP響應(yīng)也由四個部分組成炉奴,分別是:?狀態(tài)行、消息報頭蛇更、空行瞻赶、響應(yīng)正文

常用的響應(yīng)報頭(了解)

1. Cache-Control:must-revalidate, no-cache, private。

這個值告訴客戶端派任,服務(wù)端不希望客戶端緩存資源砸逊,在下次請求資源時,必須要從新請求服務(wù)器掌逛,不能從緩存副本中獲取資源师逸。

2. Connection:keep-alive

這個字段作為回應(yīng)客戶端的Connection:keep-alive,告訴客戶端服務(wù)器的tcp連接也是一個長連接豆混,客戶端可以繼續(xù)使用這個tcp連接發(fā)送http請求篓像。

3. Content-Encoding:gzip

告訴客戶端,服務(wù)端發(fā)送的資源是采用gzip編碼的皿伺,客戶端看到這個信息后员辩,應(yīng)該采用gzip對資源進行解碼。

4. Content-Type:text/html;charset=UTF-8

告訴客戶端鸵鸥,資源文件的類型奠滑,還有字符編碼,客戶端通過utf-8對資源進行解碼妒穴,然后對資源進行html解析宋税。通常我們會看到有些網(wǎng)站是亂碼的,往往就是服務(wù)器端沒有返回正確的編碼讼油。

5.Date: Thu, 02 Jan 2020 06:32:55 GMT

這個是服務(wù)端發(fā)送資源時的服務(wù)器時間杰赛,GMT是格林尼治所在地的標(biāo)準時間。http協(xié)議中發(fā)送的時間都是GMT的矮台,這主要是解決在互聯(lián)網(wǎng)上乏屯,不同時區(qū)在相互請求資源的時候阔墩,時間混亂問題。

響應(yīng)狀態(tài)碼

響應(yīng)狀態(tài)代碼有三位數(shù)字組成瓶珊,第一個數(shù)字定義了響應(yīng)的類別啸箫,且有五種可能取值。

常見狀態(tài)碼:

100~199:表示服務(wù)器成功接收部分請求伞芹,要求客戶端繼續(xù)提交其余請求才能完成整個處理過程忘苛。

200~299:表示服務(wù)器成功接收請求并已完成整個處理過程。常用200(OK 請求成功)唱较。

300~399:為完成請求扎唾,客戶需進一步細化請求。例如:請求的資源已經(jīng)移動一個新地址南缓、常用302(所請求的頁面已經(jīng)臨時轉(zhuǎn)移至新的url)胸遇、307和304(使用緩存資源)。

400~499:客戶端的請求有錯誤汉形,常用404(服務(wù)器無法找到被請求的頁面)纸镊、403(服務(wù)器拒絕訪問,權(quán)限不夠)概疆。

500~599:服務(wù)器端出現(xiàn)錯誤逗威,常用500(請求未完成。服務(wù)器遇到不可預(yù)知的情況)岔冀。

4-爬蟲requests庫

requests的作用

作用:發(fā)送網(wǎng)絡(luò)請求凯旭,返回相應(yīng)數(shù)據(jù)

中文文檔API:http://docs.python-requests.org/zh_CN/latest/

response.text和response.content的區(qū)別

response.text

類型:str

修改編碼方式:response.encoding = 'utf-8'

response.content

類型:bytes

修改編碼方式:response.content.decode('utf8')

requests深入

發(fā)送POST請求

哪些地方我們會用到POST請求:

1 登錄注冊(post比get安全)

2 需要傳輸大文本的時候(POST請求對數(shù)據(jù)長度沒有要求)

爬蟲也需要在這兩個地方模擬瀏覽器發(fā)送post請求

使用代理

問題:為什么爬蟲需要使用代理

1 讓服務(wù)器以為不是同一個客戶端在請求

2 防止我們的真實地址被泄露,防止被追究

使用代理IP

準備一堆的IP地址使套,組成IP池罐呼,隨機選擇一個IP來用

檢查IP的可用性

1.可以使用requests檢查

2.在線代理IP質(zhì)量檢查的網(wǎng)站

cookie和session區(qū)別

cookie數(shù)據(jù)存放在客戶端的瀏覽器上,session數(shù)據(jù)放在服務(wù)器上侦高。

cookie不是很安全嫉柴,別人可以分析存放在本地的cookie并進行cookie欺騙

session會在一定時間內(nèi)保存在服務(wù)器上。當(dāng)訪問增多矫膨,會比較占用你服務(wù)器的性能

單個cookie保存的數(shù)據(jù)不能超過4K差凹,很多瀏覽器都限制一個站點最多保存20個cookie

爬蟲處理cookie和session

帶上cookie期奔、session的好處:能夠請求到登錄之后的頁面

帶上cookie侧馅、session的弊端:一套cookie和session往往和一個用戶對應(yīng)請求太多,請求次數(shù)太多呐萌,容易被服務(wù)器識別為爬蟲

不需要cookie的時候盡量不去使用cookie

但是為了獲取登錄之后的頁面馁痴,我們必須發(fā)送帶有cookies的請求

requests提供了一個叫做session類,來實現(xiàn)客戶端和服務(wù)端的會話保持使用方法1實例化一個session對象2讓session發(fā)送get或者post請求session=requests.session()response=session.get(url,headers)

請求登錄之后的網(wǎng)站的思路:

1 實例化session

2 先使用session發(fā)送請求,登錄對應(yīng)網(wǎng)站肺孤,把cookie保持在session中

3 在使用session請求登錄之后才能訪問的網(wǎng)站罗晕,session能夠自動攜帶登錄成功時保存在其中的cookie济欢,進行請求

不發(fā)送post請求,使用cookie獲取登錄后的頁面

cookie過期時間很長的網(wǎng)站

在cookie過期之前能夠拿到所有的數(shù)據(jù)小渊,

配合其他程序一起使用法褥,其他程序?qū)iT獲取cookie,當(dāng)前程序?qū)iT請求頁面

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末酬屉,一起剝皮案震驚了整個濱河市半等,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌呐萨,老刑警劉巖杀饵,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異谬擦,居然都是意外死亡切距,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門惨远,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谜悟,“玉大人,你說我怎么就攤上這事北秽《奶桑” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵羡儿,是天一觀的道長礼患。 經(jīng)常有香客問我,道長掠归,這世上最難降的妖魔是什么缅叠? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮虏冻,結(jié)果婚禮上肤粱,老公的妹妹穿的比我還像新娘。我一直安慰自己厨相,他們只是感情好领曼,可當(dāng)我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蛮穿,像睡著了一般庶骄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上践磅,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天单刁,我揣著相機與錄音,去河邊找鬼府适。 笑死羔飞,一個胖子當(dāng)著我的面吹牛肺樟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播逻淌,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼么伯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了卡儒?” 一聲冷哼從身側(cè)響起蹦狂,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎朋贬,沒想到半個月后凯楔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡锦募,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年摆屯,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片糠亩。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡虐骑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出赎线,到底是詐尸還是另有隱情廷没,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布垂寥,位于F島的核電站颠黎,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏滞项。R本人自食惡果不足惜狭归,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望文判。 院中可真熱鬧过椎,春花似錦、人聲如沸戏仓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赏殃。三九已至敷待,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嗓奢,已是汗流浹背讼撒。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留股耽,地道東北人根盒。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像物蝙,于是被迫代替她去往敵國和親炎滞。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,689評論 2 354

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

  • 浩言正語442:格拉斯在《剝洋蔥》中說:“回憶就像剝洋蔥诬乞,每剝掉一層就會露出一些早已忘卻的事情册赛。層層剝落間,淚濕衣...
    永遠的浩子閱讀 98評論 0 1
  • 大人們經(jīng)常會羨慕小朋友震嫉,無憂無慮天真爛漫森瘪,每天什么都不用做玩耍就好。不像大人需要尊守?zé)o數(shù)規(guī)則票堵,肩負各種責(zé)任扼睬。 可是...
    HZHSR閱讀 302評論 0 0
  • 寫個序 如果有一天我將死去,那么這就是我為自己的過去,現(xiàn)在,未來,寫的一個傳記. 告訴這個世界,我曾經(jīng)來過. 我是...
    沐似雨閱讀 202評論 0 0
  • 我在工作日的早上,慢慢地走悴势,畫了美美的妝窗宇,慢慢地走√叵耍縱使心里有些發(fā)慌军俊,我最會用"這是最后一次放縱"來安慰自己∨醮妫看到...
    插畫大師Q閱讀 72評論 0 1
  • 觀察者模式:在對象之間定義一對多的依賴粪躬,當(dāng)對象的狀態(tài)發(fā)生改變時,依賴對象就會收到通知自動更新昔穴。我們先看看jdk提供...
    探索者_逗你玩兒閱讀 108評論 0 0