爬蟲(chóng)前奏
爬蟲(chóng)的實(shí)際例子
- 搜索引擎(百度、谷歌、360搜索等)
- 伯樂(lè)在線
- 惠惠購(gòu)物助手
- 數(shù)據(jù)分析與研究(數(shù)據(jù)冰山知乎專(zhuān)欄)
- 搶票軟件等
什么是網(wǎng)絡(luò)爬蟲(chóng)
通俗理解:爬蟲(chóng)是一個(gè)模擬人類(lèi)請(qǐng)求網(wǎng)站行為的程序,可以自動(dòng)請(qǐng)求網(wǎng)頁(yè),并將數(shù)據(jù)爬取下來(lái),然后使用一定的規(guī)則提取有價(jià)值的數(shù)據(jù)
通用爬蟲(chóng)和聚焦爬蟲(chóng)
**通用爬蟲(chóng):**通用爬蟲(chóng)是搜索引擎抓取系統(tǒng)(百度、谷歌、搜狗等)的重要組成部分,主要是將互聯(lián)網(wǎng)上的網(wǎng)頁(yè)下載到本地,形成一個(gè)互聯(lián)網(wǎng)內(nèi)容的鏡像備份
**聚焦爬蟲(chóng):**是面向特定需求的一種網(wǎng)絡(luò)爬蟲(chóng)程序,他與通用爬蟲(chóng)的區(qū)別在于:聚焦爬蟲(chóng)在實(shí)施網(wǎng)頁(yè)抓取的時(shí)候會(huì)對(duì)內(nèi)容進(jìn)行篩選和處理,盡量保證只抓取與需求相關(guān)的網(wǎng)頁(yè)信息
HTTP協(xié)議和Chrome抓包工具
什么是http和https協(xié)議
- http:中文意思就是超文本傳輸協(xié)議,是一種發(fā)布和接收HTML頁(yè)面的方法。服務(wù)器端口是80端口。
- https:是http協(xié)議的加密版本,在http下加入了SSL層,服務(wù)器端口號(hào)是443端口
在瀏覽器中發(fā)送一個(gè)http請(qǐng)求的過(guò)程
當(dāng)用戶在瀏覽器的地址欄中輸入一個(gè)URL并按回車(chē)鍵之后,瀏覽器會(huì)向http服務(wù)器發(fā)送http請(qǐng)求,http請(qǐng)求主要分成“get”和“post”兩種方法
- 當(dāng)我們?cè)跒g覽器輸入U(xiǎn)RL:http://www.baidu.com的時(shí)候,瀏覽器會(huì)發(fā)送一個(gè)request請(qǐng)求去獲取http://www.baidu.com的html文件,服務(wù)器把response文件對(duì)象發(fā)送回瀏覽器
- 瀏覽器分析response中的html,發(fā)現(xiàn)其中引用很多其他的文件,比如images文件,css文件,js文件。瀏覽器會(huì)自動(dòng)再次發(fā)送request去獲取圖片,css文件或者js文件
- 當(dāng)所有的文件都下載成功后,網(wǎng)頁(yè)會(huì)根據(jù)html語(yǔ)法結(jié)構(gòu),完整的顯示出來(lái)
url詳解
URL:統(tǒng)一資源定位符
scheme
:
//
host
:
port
/
path
/
?query
-
string
=
xxx
#anchor
- scheme:代表的是訪問(wèn)的協(xié)議,一般為http或者h(yuǎn)ttps以及ftp等
- host:主機(jī)名,域名,比如www.baidu.com
- port:端口號(hào),當(dāng)你訪問(wèn)一個(gè)網(wǎng)站的時(shí)候,瀏覽器默認(rèn)使用80端口
- path:查找路徑,比如:www.jianshu.com/trending/now,后面的trending/now就是path
- query-string:查詢(xún)字符串,比如www.baidu.com/s?wb=python,后面的wb=python就是查詢(xún)字符串
-
anchor:錨點(diǎn),后臺(tái)一般不用管,前段用來(lái)做頁(yè)面定位的
在瀏覽器中請(qǐng)求一個(gè)url,瀏覽器會(huì)對(duì)這個(gè)url進(jìn)行一個(gè)編碼。除英文字母,數(shù)據(jù)和部分符號(hào)外,其他的全部使用百分號(hào)+十六進(jìn)制碼值進(jìn)行編碼
常用的請(qǐng)求方法
在http協(xié)議中,定義了八種請(qǐng)求方法,這里介紹兩種常用的請(qǐng)求方法,分別是get請(qǐng)求和post請(qǐng)求
- get請(qǐng)求:一般情況下,只從服務(wù)器獲取數(shù)據(jù)下來(lái),并不會(huì)對(duì)服務(wù)器資源產(chǎn)生任何影響的時(shí)候會(huì)使用get請(qǐng)求
- post請(qǐng)求:向服務(wù)器發(fā)送數(shù)據(jù)(登陸)、上傳文件等,會(huì)對(duì)服務(wù)器資源產(chǎn)生影響的時(shí)候會(huì)只用post請(qǐng)求,以上是在網(wǎng)站開(kāi)發(fā)中常用的兩種方法。并且一般情況下都會(huì)遵循使用的原則。但是有的網(wǎng)站和服務(wù)器為了做反爬蟲(chóng)機(jī)制,也經(jīng)常會(huì)不按常理出牌,有可能一個(gè)應(yīng)該使用get方法的請(qǐng)求就一定要改成post請(qǐng)求,這里需要視情況而定
請(qǐng)求頭常見(jiàn)參數(shù)
在http協(xié)議中,向服務(wù)器發(fā)送一個(gè)請(qǐng)求,數(shù)據(jù)分成三部分,第一個(gè)是把數(shù)據(jù)放在url中,第二個(gè)是把數(shù)據(jù)放在body中(在post請(qǐng)求中),第三個(gè)是將數(shù)據(jù)放在head中。這里介紹在網(wǎng)絡(luò)爬蟲(chóng)中經(jīng)常會(huì)用到的一些請(qǐng)求參數(shù)
- User-Agent:瀏覽器名稱(chēng)。這個(gè)在網(wǎng)絡(luò)爬蟲(chóng)中經(jīng)常會(huì)被使用到。請(qǐng)求一個(gè)網(wǎng)頁(yè)的時(shí)候,服務(wù)器通過(guò)這個(gè)參數(shù)就可以知道這個(gè)請(qǐng)求是由哪種瀏覽器發(fā)送的,如果我們是通過(guò)爬蟲(chóng)發(fā)送請(qǐng)求,那么我們的User-Agent就是python,這對(duì)于那些有反爬蟲(chóng)機(jī)制的網(wǎng)站來(lái)說(shuō),可以輕易的判斷就是爬蟲(chóng),因此這里需要設(shè)置這個(gè)值來(lái)偽裝我們的爬蟲(chóng)
- Referer:表明當(dāng)前這個(gè)請(qǐng)求是從哪個(gè)url過(guò)來(lái)的,這個(gè)一般也可以用來(lái)做反爬蟲(chóng)技術(shù)。如果不是從指定的頁(yè)面過(guò)來(lái)的,那么就不做相應(yīng)的響應(yīng)
- Cookie:http協(xié)議是無(wú)狀態(tài)的,也就是同一個(gè)人發(fā)送了兩次請(qǐng)求,服務(wù)器沒(méi)有能力知道這兩個(gè)請(qǐng)求是否來(lái)自同一個(gè)人。因此這時(shí)候就用cookie來(lái)做標(biāo)識(shí),一般如果想要做登陸后才能訪問(wèn)的網(wǎng)站,那么就需要發(fā)送cookie信息了
常見(jiàn)響應(yīng)狀態(tài)碼
200:請(qǐng)求正常,服務(wù)器正常返回?cái)?shù)據(jù)
301:永久重定向,比如在訪問(wèn)www.jingdong.com的時(shí)候會(huì)重定向到www.jd.com
302:臨時(shí)重定向,比如在訪問(wèn)一個(gè)需要登陸的頁(yè)面的時(shí)候,而此時(shí)沒(méi)有登陸,那么就會(huì)重定向到登陸頁(yè)面
400:請(qǐng)求的url在服務(wù)器上找不到,換句話說(shuō)就是url錯(cuò)誤
403:服務(wù)器拒絕訪問(wèn),權(quán)限不夠
500:服務(wù)器內(nèi)部錯(cuò)誤,可能是服務(wù)器出現(xiàn)bug了
chrome抓包工具
chrome瀏覽器是一個(gè)非常接近開(kāi)發(fā)者的瀏覽器??梢苑奖愕牟榭淳W(wǎng)絡(luò)請(qǐng)求以及發(fā)送的參數(shù),對(duì)著網(wǎng)頁(yè) 右鍵->檢查,然后就可以打開(kāi)開(kāi)發(fā)者選項(xiàng)
Elements:展示當(dāng)前網(wǎng)頁(yè)是由哪些代碼構(gòu)成的
Console:控制臺(tái),一般在抓包中間用的并不是很多
Sources:查看一個(gè)網(wǎng)頁(yè)由哪些文件組成的
Network:查看瀏覽器發(fā)起的一個(gè)具體的請(qǐng)求
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

