(2018-05-19.Python從Zero到One)3、(爬蟲(chóng))動(dòng)態(tài)HTML處理和機(jī)器圖像識(shí)別__1.3.0爬蟲(chóng)棒仍、反爬蟲(chóng)悲靴、反反爬蟲(chóng)之間的斗爭(zhēng)

爬蟲(chóng)(Spider),反爬蟲(chóng)(Anti-Spider)降狠,反反爬蟲(chóng)(Anti-Anti-Spider) 之間恢宏壯闊的斗爭(zhēng)...

Day 1

  • 小莫想要某站上所有的電影对竣,寫(xiě)了標(biāo)準(zhǔn)的爬蟲(chóng)(基于HttpClient庫(kù))庇楞,不斷地遍歷某站的電影列表頁(yè)面,根據(jù) Html 分析電影名字存進(jìn)自己的數(shù)據(jù)庫(kù)否纬。
  • 這個(gè)站點(diǎn)的運(yùn)維小黎發(fā)現(xiàn)某個(gè)時(shí)間段請(qǐng)求量陡增吕晌,分析日志發(fā)現(xiàn)都是 IP(xxx.xxx.xxx.xxx)這個(gè)用戶,并且 user-agent 還是 Python-urllib/2.7 临燃,基于這兩點(diǎn)判斷非人類后直接在服務(wù)器上封殺睛驳。

Day 2

  • 小莫電影只爬了一半,于是也針對(duì)性的變換了下策略:1. user-agent 模仿百度("Baiduspider...")膜廊,2. IP每爬半個(gè)小時(shí)就換一個(gè)IP代理乏沸。
  • 小黎也發(fā)現(xiàn)了對(duì)應(yīng)的變化,于是在服務(wù)器上設(shè)置了一個(gè)頻率限制爪瓜,每分鐘超過(guò)120次請(qǐng)求的再屏蔽IP蹬跃。 同時(shí)考慮到百度家的爬蟲(chóng)有可能會(huì)被誤傷,想想市場(chǎng)部門(mén)每月幾十萬(wàn)的投放铆铆,于是寫(xiě)了個(gè)腳本蝶缀,通過(guò) hostname 檢查下這個(gè) ip 是不是真的百度家的,對(duì)這些 ip 設(shè)置一個(gè)白名單薄货。

Day 3

  • 小莫發(fā)現(xiàn)了新的限制后翁都,想著我也不急著要這些數(shù)據(jù),留給服務(wù)器慢慢爬吧谅猾,于是修改了代碼柄慰,隨機(jī)1-3秒爬一次,爬10次休息10秒税娜,每天只在8-12坐搔,18-20點(diǎn)爬,隔幾天還休息一下敬矩。
  • 小黎看著新的日志頭都大了薯蝎,再設(shè)定規(guī)則不小心會(huì)誤傷真實(shí)用戶,于是準(zhǔn)備換了一個(gè)思路谤绳,當(dāng)3個(gè)小時(shí)的總請(qǐng)求超過(guò)50次的時(shí)候彈出一個(gè)驗(yàn)證碼彈框,沒(méi)有準(zhǔn)確正確輸入的話就把 IP 記錄進(jìn)黑名單袒哥。

Day 4

  • 小莫看到驗(yàn)證碼有些傻臉了缩筛,不過(guò)也不是沒(méi)有辦法,先去學(xué)習(xí)了圖像識(shí)別(關(guān)鍵詞 PIL堡称,tesseract)瞎抛,再對(duì)驗(yàn)證碼進(jìn)行了二值化,分詞却紧,模式訓(xùn)練之后桐臊,總之最后識(shí)別了小黎的驗(yàn)證碼(關(guān)于驗(yàn)證碼胎撤,驗(yàn)證碼的識(shí)別,驗(yàn)證碼的反識(shí)別也是一個(gè)恢弘壯麗的斗爭(zhēng)史...)断凶,之后爬蟲(chóng)又跑了起來(lái)伤提。
  • 小黎是個(gè)不折不撓的好同學(xué),看到驗(yàn)證碼被攻破后认烁,和開(kāi)發(fā)同學(xué)商量了變化下開(kāi)發(fā)模式肿男,數(shù)據(jù)并不再直接渲染,而是由前端同學(xué)異步獲取却嗡,并且通過(guò) JavaScript 的加密庫(kù)生成動(dòng)態(tài)的 token舶沛,同時(shí)加密庫(kù)再進(jìn)行混淆(比較重要的步驟的確有網(wǎng)站這樣做,參見(jiàn)淘寶和微博的登陸流程)窗价。

Day 5

  • 混淆過(guò)的加密庫(kù)就沒(méi)有辦法了么如庭?當(dāng)然不是,可以慢慢調(diào)試撼港,找到加密原理坪它,不過(guò)小莫不準(zhǔn)備用這么耗時(shí)耗力的方法,他放棄了基于 HttpClient的爬蟲(chóng)餐胀,選擇了內(nèi)置瀏覽器引擎的爬蟲(chóng)(關(guān)鍵詞:PhantomJS哟楷,Selenium),在瀏覽器引擎運(yùn)行頁(yè)面否灾,直接獲取了正確的結(jié)果卖擅,又一次拿到了對(duì)方的數(shù)據(jù)。
  • 小黎:.....

爬蟲(chóng)與發(fā)爬蟲(chóng)的斗爭(zhēng)還在繼續(xù)...

通常情況下墨技,在爬蟲(chóng)與反爬蟲(chóng)的對(duì)弈中惩阶,爬蟲(chóng)一定會(huì)勝利。

換言之扣汪,只要人類能夠正常訪問(wèn)的網(wǎng)頁(yè)断楷,爬蟲(chóng)在具備同等資源的情況下就一定可以抓取到。

關(guān)于爬蟲(chóng)部分一些建議:

  1. 盡量減少請(qǐng)求次數(shù)崭别,能抓列表頁(yè)就不抓詳情頁(yè)冬筒,減輕服務(wù)器壓力,程序員都是混口飯吃不容易茅主。

  2. 不要只看 Web 網(wǎng)站舞痰,還有手機(jī) App 和 H5,這樣的反爬蟲(chóng)措施一般比較少诀姚。

  3. 實(shí)際應(yīng)用時(shí)候响牛,一般防守方做到根據(jù) IP 限制頻次就結(jié)束了,除非很核心的數(shù)據(jù),不會(huì)再進(jìn)行更多的驗(yàn)證呀打,畢竟成本的問(wèn)題會(huì)考慮到矢赁。

  4. 如果真的對(duì)性能要求很高,可以考慮多線程(一些成熟的框架如 Scrapy都已支持)贬丛,甚至分布式...

關(guān)于反爬蟲(chóng)部分的一些建議:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末撩银,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子瘫寝,更是在濱河造成了極大的恐慌蜒蕾,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件焕阿,死亡現(xiàn)場(chǎng)離奇詭異咪啡,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)暮屡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)撤摸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人褒纲,你說(shuō)我怎么就攤上這事准夷。” “怎么了莺掠?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵衫嵌,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我彻秆,道長(zhǎng)楔绞,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任唇兑,我火速辦了婚禮酒朵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘扎附。我一直安慰自己蔫耽,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布留夜。 她就那樣靜靜地躺著匙铡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪碍粥。 梳的紋絲不亂的頭發(fā)上慰枕,一...
    開(kāi)封第一講書(shū)人閱讀 50,050評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音即纲,去河邊找鬼。 笑死博肋,一個(gè)胖子當(dāng)著我的面吹牛低斋,可吹牛的內(nèi)容都是我干的蜂厅。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼膊畴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼掘猿!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起唇跨,我...
    開(kāi)封第一講書(shū)人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤稠通,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后买猖,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體改橘,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年玉控,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了飞主。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡高诺,死狀恐怖碌识,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情虱而,我是刑警寧澤筏餐,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站牡拇,受9級(jí)特大地震影響魁瞪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜诅迷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一佩番、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧罢杉,春花似錦趟畏、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至律想,卻和暖如春猎莲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背技即。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工著洼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓身笤,卻偏偏與公主長(zhǎng)得像豹悬,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子液荸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351