使用scrapy做爬蟲遇到的一些坑:網站常用的反爬蟲策略,如何機智的躲過反爬蟲Crawled (403)
在這幅圖中我們可以很清晰地看到爬蟲與反爬蟲是如何進行鬥智鬥勇的。
在學習使用爬蟲時,我們製作出來的爬蟲往往是在“裸奔”,非常的簡單。
簡單低階的爬蟲有一個很大的優點:速度快,偽裝度低。如果你爬取的網站沒有反爬機制,爬蟲們可以非常簡單粗暴地快速抓取大量資料,但是這樣往往就導致一個問題,因為請求過多,很容易造成伺服器過載,不能正常工作。
於是許多網站為了保護自己的伺服器,往往會採用反爬蟲技術來“狙擊”爬蟲,讓爬蟲無法正常工作。
網站一般是如何進行識別爬蟲呢?總的來說有以下幾種:
一.檢查header資訊,一般有User-Agent,Referer、Cookies等等
1.User-Agent是檢查使用者所用客戶端的種類和版本,在Scrapy
2.Referer是檢查此請求由哪裡來,通常可以做圖片的盜鏈判斷。在Scrapy中,如果某個頁面url是通過之前爬取的頁面提取到,Scrapy會自動把之前爬取的頁面url作為Referfer。也可以通過上面的方式自己定義Referfer欄位。
3.網站可能會檢測Cookie中session_id的使用次數,如果超過限制,就觸發反爬策略。
二. 網站常常會針對IP訪問頻率統計,設定一個閾值,當超過這個閾值時,網站就會判斷這個IP訪問太過頻繁,會短時間甚至永久性地禁止該IP地址的訪問 。
三.網站往往會給一個瀏覽器隱藏的連線,正常的瀏覽網頁的人看不見,也更加不會去點選。加入來訪者點選了改連線,就會被網站認定是爬蟲。
那麼網站識別出爬蟲後就會像上圖一樣,開始給爬蟲設定各種關卡啦!
1.設定限制訪問:在一段時間內該IP是無法訪問的
2.返回驗證碼:要求使用者輸入驗證碼,防止使用者是機器
3.採用ajax非同步載入:如果只是爬取靜態網頁的爬蟲是什麼都得不到的
4.爬蟲陷阱:讓你爬取的內容變成其他和本網站無關的資訊
5.加速樂的服務:在訪問之前先判斷客戶端的cookie正不正確。如果不正確,返回521狀態碼,set-cookie並且返回一段js程式碼通過瀏覽器執行後又可以生成一個cookie,只有這兩個cookie一起傳送給伺服器,才會返回正確的網頁內容。
6.javascript渲染:網頁開發者將重要資訊放在網頁中但不寫入
至此,如果還有爬蟲能夠突破這些重圍,那就是人生贏家了!網站一般就放棄阻止這隻厲害的無法無天的爬蟲了,因為再繼續攔阻下去,成本會很高,得不償失,而且如果因為反爬蟲的技術太厲害,往往還會誤傷友軍,讓一部分使用者無法正常瀏覽網站。一般而言,反爬高效往往會與誤傷友軍率成非線性正比。
針對以上的反爬,可以有以下幾種躲過反爬蟲的策略。
1.設定等待時間:
直接:匯入time,然後限制時間為正常人瀏覽時間
間接:看具體情況來等待,比如某些元素需要一定時間載入。wait1.until(lambda driver:driver.find_element_by_xpath("//div[@id='link-report']/span"))
2.識別驗證碼:
人工識別:適合比較複雜的驗證碼,正確率高,但是成本也高
機器識別:呼叫線上驗證碼識別軟體介面識別驗證碼,正確率百分之八九十以上
3.非同步載入:
① fiddler / wireshark抓包分析ajax請求的介面,再通過規律仿造伺服器構造一個請求訪問伺服器得到返回的真實資料包。
②通過PhantomJS+Selenium模擬瀏覽器行為,抓取經過js渲染後的頁面。phantomjs是一個無頭無介面瀏覽器,使用selenium可以驅動它模擬瀏覽器的一切操作,但缺點也很明顯,爬取效率低;需要注意的是,呼叫PhantomJs需要指定PhantomJs的可執行檔案路徑,通常是將該路徑新增到系統的path路徑,讓程式執行時自動去path中尋找。使用Selenium後,請求不再由Scrapy的Downloader執行,所以之前新增的請求頭等資訊都會失效,需要在Selenium中重新新增
4.爬蟲陷阱:
一般是比較簡單的死迴圈,可以對爬蟲將要爬取的連結進行判斷,不重複爬取相同的頁面。除此之外,對於特定的元素看清之後小心爬取,還可使用scrapy的LinkExtractor設定unique引數為True即可或者直接設定爬蟲的最大迴圈次數。
5.針對使用者行為:
① cookie禁用:對於一些不需要登入的網站,可以在setting.py檔案中設定COOKIES_ENABLED = False
② 自動限速:在setting.py檔案中設定DOWNLOAD_DELAY = 1
③判斷header:在請求時構造一個header,每次url請求更換一次user-agent。可以百度,也可看看之前的文章
④ 採用代理IP:可以做一個IP代理池,每次執行時隨機挑選一個做訪問IP。IP代理有收費有免費,看情況使用
免費的代理不一定能用,需要先做一下測試
# testproxy.py
#encoding=utf8
import urllib
import requests
import sys
if __name__ == "__main__":
for url in sys.stdin:
resp = requests.get(url)
if resp.status_code ==requests.codes.ok:
print url
然後寫個指令碼,用crontab設定其定期執行
# updateproxy.sh
set -x
scrapy crawl proxy > tmp
cat tmp > python updateproxy.sh > proxy
6.scrapy和redis分散式爬蟲:
可以利用多臺機器的寬頻加速爬取,還有利用多臺機器的ip加速爬取
一般步驟如下:
1.基本的http抓取工具,如scrapy
2.避免重複抓取網頁,如Bloom Filter
3.維護一個所有叢集機器能夠有效分享的分散式佇列
4.將分散式佇列和Scrapy結合
5.後續處理,網頁析取(python-goose),儲存(Mongodb)
7.使用scrapy反爬:
8.加速樂:
將瀏覽器返回的js程式碼放在一個字串中,然後利用nodejs對這段程式碼進行反壓縮,然後對區域性的資訊進行解密,得到關鍵資訊放入下一次訪問請求的頭部中。
(未完待續)
相關推薦
使用scrapy做爬蟲遇到的一些坑:網站常用的反爬蟲策略,如何機智的躲過反爬蟲Crawled (403)
在這幅圖中我們可以很清晰地看到爬蟲與反爬蟲是如何進行鬥智鬥勇的。在學習使用爬蟲時,我們製作出來的爬蟲往往是在“裸奔”,非常的簡單。簡單低階的爬蟲有一個很大的優點:速度快,偽裝度低。如果你爬取的網站沒有反爬機制,爬蟲們可以非常簡單粗暴地快速抓取大量資料,但是這樣往往就導致一個問
使用scrapy做爬蟲遇到的一些坑:No module named items以及一些解決方案
最近在學習scrapy,因為官方文件看著比較累,所以看著崔慶才老師寫的部落格來做:https://cuiqingcai.com/3472.html# -*- coding: utf-8 -*- import re import scrapy # 匯入scrapy包 from
使用scrapy做爬蟲遇到的一些坑:使用xpath和CSS遇到的一些 invalid syntax
1.引號的歧義:最外面應該使用單引號 錯誤:正確:把定位的xpath外加單引號2.使用了關鍵字做變數錯誤:正確:注意關鍵字不能做變數3.進入shell視窗時,url添加了“”錯誤:正確:去掉url的引號4.使用xpath匹配相關資訊,返回為空列表錯誤:因為一開始網址就是錯誤
scrapy基礎知識之 關於爬蟲部分一些建議:
限制 支持 結束 攜程 target 經理 框架 實際應用 分享 1.盡量減少請求次數,能抓列表頁就不抓詳情頁,減輕服務器壓力,程序員都是混口飯吃不容易。 2.不要只看 Web 網站,還有手機 App 和 H5,這樣的反爬蟲措施一般比較少。 3.實際應用時候,一般防守方做到
Java爬蟲走過的坑:org.apache.http.impl.client.HttpClientBuilder.dnsResolver
原來的maven專案正常下載時沒問題的,後來用spring框架做了個下載服務,執行後,提示這個。 解決方案,新增httpclient <dependency> <groupId>org.apache.httpcomponents</gr
用python寫爬蟲的一些技巧:進階篇
以前寫過一篇使用python爬蟲抓站的一些技巧總結,總結了諸多爬蟲使用的方法;那篇東東現在看來還是挺有用的,但是當時很菜(現在也菜,但是比那時進步了不少),很多東西都不是很優,屬於”只是能用”這麼個層次。這篇進階篇打算把“能用”提升到“用得省事省心”這個層次
linux系統監控:記錄用戶操作軌跡,誰動過服務器
linux linux script linux安全 linux系統監控 甘兵 1、前言 我們在實際工作當中,都碰到過誤操作、誤刪除、誤修改過配置文件等等事件。對於沒有堡壘機的公司來說,要在linux系統上深究到底誰做過配置文件的修改、做過誤刪除是很頭疼的事情,特別是遇到刪庫跑路
店鋪淘客模式怎麼做的?帶你操作2019年×××電商專案,月入過萬
再沒錢的時候最能看出一個人的洞察力,嗅出商機的能力,還有執行力,電商時代不缺商機,缺少是發現商機的眼睛。如果你錯過了當年的淘寶網店,前些年的淘客,那你就不要再錯過當下熱門的店鋪淘客了。 店鋪淘客有很多種的說法,店淘,淘客,店群等同行的一些用語,主要以“店中店”的模式操作,利用軟體批量採集寶貝,釋出和下單,依
Java:部分常用函式式介面,Stream流
1、常用函式式介面-Predicate判斷介面 有時候我們需要對某種型別的資料進行判斷,從而得到一個boolean值結果。這時可以 使用java.util.function.Predicate<T>介面。 1)、抽象方法:判斷“是否”,用於判斷,重寫
北漂程式設計師的心酸:北漂六年了,沒住過4000的房子
在外打工,是很多人心中難言的痛。表面上光鮮亮麗,平時出入高檔寫字樓,傑克大衛叫著,回到老家瞬間就變成二狗子,除了手裡有點餘錢之外,在大城市仍然一無所有,只是一個過客而已。一名網友在網際網路社群發起了這樣的一個帖子:各位北漂每個月發了薪資後,交完房租和還完信用卡各種
初探Java設計模式3:行為型模式(策略,觀察者等)
轉自https://javadoop.com/post/design-pattern行為型模式行為型模式行為型模式關注的是各個類之間的相互作用,將職責劃分清楚,使得我們的程式碼更加地清晰。策略模式策略模式太常用了,所以把它放到最前面進行介紹。它比較簡單,我就不廢話,直接用程式
Python3 大型網路爬蟲實戰 003 — scrapy 大型靜態圖片網站爬蟲專案實戰 — 實戰:爬取 169美女圖片網 高清圖片
開發環境 Python第三方庫:lxml、Twisted、pywin32、scrapy Python 版本:python-3.5.0-amd64 PyCharm軟體版本:pycharm-professional-2016.1.4 電腦系統:Wi
scrapy多個爬蟲公用一些中間件、pipelines
scrapy python 使用python3請求頭headers:user-agent、代理ip,這些放在一個工程項目裏,有的爬蟲是需要中間件的或者根據反爬添加相應的條件,那這樣的情況下怎麽辦?1.中間件處理默認帶上請求頭,不帶啟用ip代理功能spiders文件夾下的爬蟲類添加屬性中間件處理這樣不管
谷歌CEO:我們做錯了一些事 但谷歌仍是理想主義的
11月29日訊息,@北京商報從度小滿金融人士處獲悉,百度正式拿到准許經營證券期貨的許可證。據許可證顯示,機構名稱為北京百度百盈科技有限公司(下稱“百度百盈”),證券期貨業務經營範圍為基金銷售。而今年8月22日,根據北京證監局官網顯示,證監局已核准百度百盈證券投資基金銷售業務資格。 企查查資訊顯示,百度百盈成
python爬蟲基礎(13:Scrapy框架之架構流程與目錄)
框架 對於特別小的爬蟲,一般直接編寫就可以了,但一般面對一個專案級別的爬蟲,都選擇用框架 框架可以理解為一個 等你填坑的程式碼: 1. 為你編寫好那些必須的、重複的程式碼 2. 為你模組化好每一個元件,自動建立元件之間的聯絡,這樣就方便使用者清晰瞭解它的
python爬蟲(四):scrapy 【1. 快速上手】
中文文件:http://www.scrapyd.cn/doc/ Scrapy是採用Python開發的一個快速、高層次的螢幕抓取和web抓取框架。 什麼是爬蟲框架? 爬蟲框架是實現爬蟲功能的一個軟體結構和功能元件集合。 爬蟲框架是一個半成品,能夠幫助使用者實現專業網路
python爬蟲(四):scrapy 【2. 其他重要部分】
中文文件:http://www.scrapyd.cn/doc/ 本節包括: 1. resquest 和 response 的屬性方法 2. scrapy提取資訊的強大方法 request 和 response request:
福利向---Scrapy爬蟲爬取多級圖片網站
1.目標站分析 目標站網址為https://52zfl.vip/zhaifuli/list_2_1.html 每頁網址有若干連結,點選每個連結,是每部圖片資源的詳情頁面,由於圖片數量較多,涉及到翻頁操作。 通過分析頁面html程式碼,提取有用部分如下:
Python爬蟲(二):Scrapy框架的配置安裝
Windows安裝方式 預設支援Python2、Python3,通過pip安裝Csrapy框架: pip install Scrapy Ubuntu(9.10以上版本)安裝方式 預設支援Python2、Python3,通過pip安裝Csrapy框架: sud
記錄一下使用支付寶電腦網站支付介面遇到的一些坑 廢話不多說,總結一下
記錄一下使用支付寶電腦網站支付介面遇到的一些坑 廢話不多說,總結一下: 廢話不多說,總結一下: 1、因為同步和非同步url新增自定義引數(處理後續操作資料庫),弄了一兩天,問了支付寶小哥哥,我聽著也是模稜兩可,最後,自己慢慢測試找到一個方法:如下 //設定同步