03.User-Agent反爬蟲

在網絡請求中,User-Agent是客戶端表明身份的一種標識,在服務器中,可以判斷User-Agent是否爲瀏覽器行爲。


瀏覽器User-Agent如下:

Chrome:
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1
Firefox:
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0
Safari:
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50
IE:
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; Tablet PC 2.0; .NET4.0E)
 

  而當我們代碼爬蟲時,不添加此類參數,如果服務器中添加User-Agent請求時,那麼代碼請求這不會通過,返回403或其它參數

在Python中,Requests庫向服務器發送Http請求時,它的User-Agent爲:

python-requests/版本號

scrapy框架User-Agent爲:

Scrapy/版本號 (+https://scrapy.org)

對於User-Agent的驗證,可以通過僞造User-Agent來突破。

python中,可以使用 fake_useragent 庫,裏面包含各種User-Agent參數。也可以自定義設置User-Agent

- ngnix中,反爬輔助配置。
server {
    listen 80;
    server_name www.baidu.com;  #真實域名
    charset utf-8;
    location /verify/uas/ {
        # User-Agent中,參數含有python、java、scrapy字樣則被限制
        if ($http_user_agent ~* (python|java|scrapy)){
            return 403;
        }
        root /root/www/html;
        index index.html;
    }
}

同樣的,除了User—Agent之外,還有Host,Referer等參數

如:

server {
    location / {
        # 沒有Referer,或請域值爲www.baidu.com,則允許訪問
        valid_referers none www.baidu.com;
        if ($invalid_referers){
            return 403;
        }
        root /root/www/html;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章