国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python解決網站的反爬蟲策略總結

2019-11-25 16:30:45
字體:
來源:轉載
供稿:網友

本文詳細介紹了網站的反爬蟲策略,在這里把我寫爬蟲以來遇到的各種反爬蟲策略和應對的方法總結一下。

從功能上來講,爬蟲一般分為數據采集,處理,儲存三個部分。這里我們只討論數據采集部分。

一般網站從三個方面反爬蟲:用戶請求的Headers,用戶行為,網站目錄和數據加載方式。前兩種比較容易遇到,大多數網站都從這些角度來反爬蟲。第三種一些應用ajax的網站會采用,這樣增大了爬取的難度(防止靜態爬蟲使用ajax技術動態加載頁面)。

1、從用戶請求的Headers反爬蟲是最常見的反爬蟲策略。

偽裝header。很多網站都會對Headers的User-Agent進行檢測,還有一部分網站會對Referer進行檢測(一些資源網站的防盜鏈就是檢測Referer)。如果遇到了這類反爬蟲機制,可以直接在爬蟲中添加Headers,將瀏覽器的User-Agent復制到爬蟲的Headers中;或者將Referer值修改為目標網站域名[評論:往往容易被忽略,通過對請求的抓包分析,確定referer,在程序中模擬訪問請求頭中添加]。對于檢測Headers的反爬蟲,在爬蟲中修改或者添加Headers就能很好的繞過。

2、基于用戶行為反爬蟲

還有一部分網站是通過檢測用戶行為,例如同一IP短時間內多次訪問同一頁面,或者同一賬戶短時間內多次進行相同操作。[這種防爬,需要有足夠多的ip來應對]

(1)、大多數網站都是前一種情況,對于這種情況,使用IP代理就可以解決。可以專門寫一個爬蟲,爬取網上公開的代理ip,檢測后全部保存起來。有了大量代理ip后可以每請求幾次更換一個ip,這在requests或者urllib中很容易做到,這樣就能很容易的繞過第一種反爬蟲。

編寫爬蟲代理:

步驟:

1.參數是一個字典{'類型':'代理ip:端口號'}
  proxy_support=urllib.request.ProxyHandler({})
2.定制、創建一個opener
  opener=urllib.request.build_opener(proxy_support)
3a.安裝opener
  urllib.request.install_opener(opener)
3b.調用opener
  opener.open(url)

用大量代理隨機請求目標網站,應對反爬蟲

#! /usr/bin/env python3.4#-*- coding:utf-8 -*-#__author__ == "tyomcat"import urllib.requestimport randomimport reurl='http://www.whatismyip.com.tw'iplist=['121.193.143.249:80','112.126.65.193:80','122.96.59.104:82','115.29.98.139:9999','117.131.216.214:80','116.226.243.166:8118','101.81.22.21:8118','122.96.59.107:843']proxy_support = urllib.request.ProxyHandler({'http':random.choice(iplist)})opener=urllib.request.build_opener(proxy_support)opener.addheaders=[('User-Agent','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36')]urllib.request.install_opener(opener)response = urllib.request.urlopen(url)html = response.read().decode('utf-8')pattern = re.compile('<h1>(.*?)</h1>.*?<h2>(.*?)</h2>')iterms=re.findall(pattern,html)for item in iterms:  print(item[0]+":"+item[1])

(2)、對于第二種情況,可以在每次請求后隨機間隔幾秒再進行下一次請求。有些有邏輯漏洞的網站,可以通過請求幾次,退出登錄,重新登錄,繼續請求來繞過同一賬號短時間內不能多次進行相同請求的限制。[評論:對于賬戶做防爬限制,一般難以應對,隨機幾秒請求也往往可能被封,如果能有多個賬戶,切換使用,效果更佳]

3、動態頁面的反爬蟲

上述的幾種情況大多都是出現在靜態頁面,還有一部分網站,我們需要爬取的數據是通過ajax請求得到,或者通過Java生成的。

解決方案:Selenium+PhantomJS                           

Selenium:自動化web測試解決方案,完全模擬真實的瀏覽器環境,完全模擬基本上所有的用戶操作

PhantomJS :一個沒有圖形界面的瀏覽器

 獲取淘寶妹妹的個人詳情地址:

#! /usr/bin/env python# -*- coding:utf-8 -*-#__author__ == "tyomcat"from selenium import webdriverimport timeimport redrive = webdriver.PhantomJS(executable_path='phantomjs-2.1.1-linux-x86_64/bin/phantomjs')drive.get('https://mm.taobao.com/self/model_info.htm?user_id=189942305&is_coment=false')time.sleep(5)pattern = re.compile(r'<div.*?mm-p-domain-info">.*?class="mm-p-info-cell clearfix">.*?<li>.*?<label>(.*?)</label><span>(.*?)</span>',re.S)html=drive.page_source.encode('utf-8','ignore')items=re.findall(pattern,html)for item in items:  print item[0],'http:'+item[1]drive.close()

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 遂川县| 济阳县| 泰顺县| 子洲县| 白银市| 滨海县| 方山县| 新竹市| 鄯善县| 滨海县| 上犹县| 百色市| 达尔| 昌都县| 科技| 泌阳县| 海伦市| 丹东市| 辛集市| 昭苏县| 杨浦区| 龙岩市| 长子县| 富民县| 思南县| 高淳县| 柳河县| 新宁县| 察雅县| 库伦旗| 镇原县| 叶城县| 彭州市| 博湖县| 靖江市| 台中县| 静乐县| 灵丘县| 南溪县| 平昌县| 乡城县|