1 簡(jiǎn)介
對(duì)于一些有一定規(guī)?;蛴再|(zhì)比較強(qiáng)的網(wǎng)站,幾乎都會(huì)做一些防爬措施,防爬措施一般來說有兩種:一種是做身份驗(yàn)證,直接把蟲子擋在了門口,另一種是在網(wǎng)站設(shè)置各種反爬機(jī)制,讓蟲子知難而返。
2 偽裝策略
我們知道即使是一些規(guī)模很小的網(wǎng)站通常也會(huì)對(duì)來訪者的身份做一下檢查,如驗(yàn)證請(qǐng)求
Headers,而對(duì)于那些上了一定規(guī)模的網(wǎng)站就更不用說了。因此,為了讓我們的爬蟲能夠成功爬取所需數(shù)據(jù)信息,我們需要讓爬蟲進(jìn)行偽裝,簡(jiǎn)單來說就是讓爬蟲的行為變得像普通用戶訪問一樣。
2.1 Request Headers問題
為了演示我使用百度搜索 163郵箱
使用 F12 工具看一下請(qǐng)求信息
在上圖中,我們可以看到 Request Headers 中包含 Referer 和 User-Agent 兩個(gè)屬性信息,Referer
的作用是告訴服務(wù)器該網(wǎng)頁(yè)是從哪個(gè)頁(yè)面鏈接過來的,User-Agent 中文是用戶代理,它是一個(gè)特殊字符串頭,作用是讓服務(wù)器能夠識(shí)別用戶使用的操作系統(tǒng)、CPU
類型、瀏覽器等信息。通常的處理策略是:1)對(duì)于要檢查 Referer 的網(wǎng)站就加上;2)對(duì)于每個(gè) request 都添加 User-Agent。
2.2 IP限制問題
有時(shí)我們可能會(huì)對(duì)一些網(wǎng)站進(jìn)行長(zhǎng)期或大規(guī)模的爬取,而我們?cè)谂廊r(shí)基本不會(huì)變換 IP,有的網(wǎng)站可能會(huì)監(jiān)控一個(gè) IP
的訪問頻率和次數(shù),一但超過這個(gè)閾值,就可能認(rèn)作是爬蟲,從而對(duì)其進(jìn)行了屏蔽,對(duì)于這種情況,我們要采取間歇性訪問的策略。
通常我們爬取是不會(huì)變換 IP 的,但有時(shí)可能會(huì)有一些特殊情況,要長(zhǎng)時(shí)間不間斷對(duì)某網(wǎng)站進(jìn)行爬取,這時(shí)我們就可能需要采用 IP
代理的方式,但這種方式一般會(huì)增加我們開銷,也就是可能要多花錢。
3 總結(jié)
有些時(shí)候我們進(jìn)行爬取時(shí) Request Headers
什么的已經(jīng)做好了偽裝,卻并未得到如愿以償?shù)慕Y(jié)果,可能會(huì)出現(xiàn)如下幾種情況:得到的信息不完整、得到不相關(guān)的信息、得不到信息,這種情況我們就需要研究網(wǎng)站的防爬機(jī)制,對(duì)其進(jìn)行詳細(xì)分析了。常見的幾種我列一下:
1)不規(guī)則信息:網(wǎng)址上會(huì)有一些沒有規(guī)則的一長(zhǎng)串信息,這種情況通常采用 selenium(模擬瀏覽器,效率會(huì)低一些) 解決;
2)動(dòng)態(tài)校驗(yàn)碼:比如根據(jù)時(shí)間及一些其他自定義規(guī)則生成,這種情況我們就需要找到其規(guī)則進(jìn)行破解了;
3)動(dòng)態(tài)交互:需要與頁(yè)面進(jìn)行交互才能通過驗(yàn)證,可以采用 selenium 解決;
4)分批次異步加載:這種情況獲取的信息可能不完整,可以采用 selenium 解決。
熱門工具 換一換