網路爬蟲小偏方:修改referer繞開登入和訪問頻率限制

王平發表於2018-12-07

小猿看官們在寫爬蟲程式時應該都會遇到如下問題:

  • 你的爬蟲程式開發時能正常抓取網頁,但是正式大量抓取時,抓取的網站總是返回403或者500等;
  • 你抓取的網站需要登入,要花大量時間去研究網站登入流程。

遇到問題1,我們的第一反應是達到對方訪問頻率限制,IP被對方遮蔽了,然後就找更多IP和降低訪問頻率。
遇到問題2,就硬著頭皮研究對方加密方法,或人肉登入後用機器把cookie儲存下來,耗去好幾天時間。

修改referer繞開訪問控制

除了上述直接攻克的方法,還有一種取巧的方法可以繞過上述兩個問題,就是修改http header中的referer來達到。注意這裡是修改referer,不是修改user-agent。

老猿在網路爬蟲的原理爬蟲分析利器:谷歌chrome瀏覽器中已經介紹過http header和怎麼使用chrome瀏覽器檢視header資訊了,還不太瞭解的小猿看官可以再去複習一下這部分知識,這裡就只著簡單科普一下referer是啥。

referer是告訴目標伺服器(訪問的網站),你是從哪兒點選進入當前頁面的。
比如你在百度搜尋猿人學,然後點選進入猿人學網站,這個時候透過抓包工具可以觀察到,referer是類似如下樣式:

http referer 截圖

就是告訴猿人學網站,你是從百度點選進入猿人學網站的。

囉嗦了一大堆,不好意思啊,回到正題。

當你遇到上訴兩個問題時,你可以嘗試把referer改成上述截圖裡的,是從搜尋引擎點選進入的,你會發現有的網站,不會遮蔽從搜尋引擎來的IP或者給這些IP的訪問頻率放得較為寬鬆。 甚至有的網站內容本來是要登陸才能看見,但是你把referer改成是從百度來的,你會發現居然不用登入也能看見了。

其實一句話就能說完,寫了這麼一大篇,額。。。

這些網站為什麼會厚此薄彼呢?
是有些網站想獲取SEO流量,就把從搜尋引擎點選進入的訪問控制放得較為寬鬆的原因。所以當你遇到如上兩個問題時,先改一改referer試試,這樣可以節省你不少的研究時間。這適用於有的爬蟲是個臨時任務或者一次性的爬蟲,不用長期維護,你快速寫好抓完資料就好的時候適用。 這個不是每個網站都有這樣的待遇,在下遇到的有此情況的網站有某職業社交網站,某工商資訊查詢網站,某娛樂票務網站,就醬,只能說這麼多。。。

ps:本篇不是把user-agent改成 Baiduspider ,讓對方網站誤認為是百度蜘蛛的做法。搜尋引擎蜘蛛的IP範圍,透過網站nginx日誌是可以蒐集完的,用點功夫的網站維護人員是知道這個IP是否為正規的搜尋引擎蜘蛛。

你要問俺是如何發現的?
老猿俺除了寫寫爬蟲,還會寫寫網站,順帶做做網站運營工作,就會經常看nginx日誌, 有天看日誌時腦洞開了一下子。。。

猿人學banner宣傳圖

我的公眾號:猿人學 Python 上會分享更多心得體會,敬請關注。

***版權申明:若沒有特殊說明,文章皆是猿人學 yuanrenxue.com 原創,沒有猿人學授權,請勿以任何形式轉載。***

相關文章