個人博客: 斯科特安的時間
最近在做的sideproject,需要網(wǎng)絡(luò)上的文章數(shù)據(jù)。于是順便學(xué)習(xí)了下爬蟲技術(shù),也算是有些心得體會。寫下來分享給剛?cè)肟拥男氯恕?/p>
怎么理解模擬登錄?
怎么理解模擬登錄?
把這句話補(bǔ)全就是: 怎么(讓機(jī)器)模擬(人在瀏覽器上的行為)登錄(指定的網(wǎng)站)。
那么這個問題實際上問的是: 人通過瀏覽器登錄網(wǎng)站時,瀏覽器為我們做了哪些事情。
那么我們需要做的只有:寫一個腳本,讓這個腳本模擬瀏覽器的行為,做我們希望它做的事情。
有興趣參考:
當(dāng)在瀏覽器地址欄輸入一個URL后回車,將會發(fā)生的事情?
那么,
人類在登錄時做了哪些事情呢,很簡單:
- 打開登錄頁面
- 輸入用戶名密碼,有時可能還有驗證碼,各種各樣的驗證碼
- 點擊登錄
- 等待瀏覽器自動跳轉(zhuǎn)
只要你稍微懂一點html語言,就應(yīng)該能分析個八九不離十。
機(jī)器人怎么做呢:
兩種方式:
方式一:
需要使用虛擬的瀏覽器引擎。
優(yōu)點: 適合幾乎所有的網(wǎng)站登錄,可以人為輸入驗證碼
缺點: 速度較慢
- 請求登錄頁面的url,比如微博的(https://passport.weibo.cn/signin/login)
- 分析html中的表單數(shù)據(jù)
2.1 找到輸入用戶名、密碼的輸入框
2.2 把輸入框的text域替換成自己的用戶名密碼 - 模擬點擊提交按鈕
方式二:
分析登錄信息提交方式,一般就是表單
優(yōu)點: 輕量,速度快
缺點: 局限性大,對技術(shù)要求高,對驗證碼機(jī)制需要做針對的破解
- 使用瀏覽器的調(diào)試模式查看網(wǎng)頁
- 檢查是否使用表單提交
- 點擊登錄按鈕,查看發(fā)送的請求數(shù)據(jù)。主要查看參數(shù)有無加密驗證或其它隱藏信息。
- 使用分析結(jié)果進(jìn)行請求操作
對于一般用戶,所有的非特殊性需求都可以使用方式一進(jìn)行完成。
若非是為了學(xué)習(xí),推薦方式一。
技術(shù)資料請參考:
Python爬蟲學(xué)習(xí)系列教程(推薦)
[Python爬蟲] Selenium爬取新浪微博移動端熱點話題及評論 (下)
如何讓腳本的行為看起來像人?
為什么要像人
因為很多服務(wù)器會使用一些反爬技術(shù)拒絕爬蟲軟件訪問。
哪些東西讓你看起來像人,哪些不像人
像人,其實可以分為兩點。
一類是看請求數(shù)據(jù),是否符合是瀏覽器發(fā)出的正常數(shù)據(jù),比如header內(nèi)容。
一類是看行為模式,發(fā)送請求對象的行為更像人類還是機(jī)器人,比如請求的頻率。
不像人,和上面對應(yīng)。
從請求數(shù)據(jù)上看,你沒說明user-agent,我就可以認(rèn)為你是非法侵入。你沒有帶著我之前給你的餅干(cookie)來,我也可以拒絕你。
從行為模式上,同一個ip訪問的頻率過高,短時間內(nèi)流量異常,都可以作為非人類處理。
結(jié)合反爬技術(shù)
- 需要登錄用cookie
- ip限制加代理
- 用user-agent告訴對方你是瀏覽器
- 服務(wù)器限制訪問頻率,加延遲
- ajax異步加載,使用js引擎或者人工分析
- redirect,最簡單的方式虛擬內(nèi)核+延遲
- 驗證碼,虛擬內(nèi)核
如何找切入點?
什么是好的登錄頁面?
沒有驗證碼,非ajax異步加載。
不一定局限于pc端網(wǎng)頁,app端、移動端一般做的反爬策略比較少,可以從這里入手,尋找適合的站點。
理解自己要做什么,如何偽裝成人類。仔細(xì)思考訪問流程,針對性的有哪些反爬手段。把這些想通了,爬蟲之路會好走很多。
轉(zhuǎn)載請注明:斯科特安的時間
相關(guān)文章和資料
技術(shù)語言資料請自行g(shù)oogle。