亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python解決網(wǎng)站的反爬蟲策略總結(jié)

 更新時間:2016年10月26日 11:01:46   作者:tyomcat  
網(wǎng)站做了很多反爬蟲工作,爬起來有些艱難,本文詳細(xì)介紹了python解決網(wǎng)站的反爬蟲策略,有需要的小伙伴可以參考下。

本文詳細(xì)介紹了網(wǎng)站的反爬蟲策略,在這里把我寫爬蟲以來遇到的各種反爬蟲策略和應(yīng)對的方法總結(jié)一下。

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

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

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

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

2、基于用戶行為反爬蟲

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

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

編寫爬蟲代理:

步驟:

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

用大量代理隨機(jī)請求目標(biāo)網(wǎng)站,應(yīng)對反爬蟲

#! /usr/bin/env python3.4
#-*- coding:utf-8 -*-
#__author__ == "tyomcat"


import urllib.request
import random
import re

url='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)、對于第二種情況,可以在每次請求后隨機(jī)間隔幾秒再進(jìn)行下一次請求。有些有邏輯漏洞的網(wǎng)站,可以通過請求幾次,退出登錄,重新登錄,繼續(xù)請求來繞過同一賬號短時間內(nèi)不能多次進(jìn)行相同請求的限制。[評論:對于賬戶做防爬限制,一般難以應(yīng)對,隨機(jī)幾秒請求也往往可能被封,如果能有多個賬戶,切換使用,效果更佳]

3、動態(tài)頁面的反爬蟲

上述的幾種情況大多都是出現(xiàn)在靜態(tài)頁面,還有一部分網(wǎng)站,我們需要爬取的數(shù)據(jù)是通過ajax請求得到,或者通過Java生成的。

解決方案:Selenium+PhantomJS                           

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

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

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

#! /usr/bin/env python
# -*- coding:utf-8 -*-
#__author__ == "tyomcat"

from selenium import webdriver
import time
import re

drive = 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()

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

相關(guān)文章

  • Python實戰(zhàn)之單詞打卡統(tǒng)計

    Python實戰(zhàn)之單詞打卡統(tǒng)計

    這篇文章主要介紹了Python實戰(zhàn)之單詞打卡統(tǒng)計,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • 解決pip install xxx報錯SyntaxError: invalid syntax的問題

    解決pip install xxx報錯SyntaxError: invalid syntax的問題

    今天小編就為大家分享一篇解決pip install xxx報錯SyntaxError: invalid syntax的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • Django REST framework視圖的用法

    Django REST framework視圖的用法

    這篇文章主要介紹了Django REST framework 視圖,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • Python?pyecharts?Map地圖數(shù)據(jù)不顯示的原因及完美解決

    Python?pyecharts?Map地圖數(shù)據(jù)不顯示的原因及完美解決

    這篇文章主要給大家介紹了關(guān)于Python?pyecharts?Map地圖數(shù)據(jù)不顯示的原因及解決辦法,pyecharts是一款將python與echarts結(jié)合的強(qiáng)大的數(shù)據(jù)可視化工具,文中通過圖文以及代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • python使用scapy模塊實現(xiàn)ping掃描的過程詳解

    python使用scapy模塊實現(xiàn)ping掃描的過程詳解

    這篇文章主要介紹了python使用scapy模塊實現(xiàn)ping掃描的過程詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • Python在畫圖時使用特殊符號的方法總結(jié)

    Python在畫圖時使用特殊符號的方法總結(jié)

    在制作圖表時,如果遇到需要利用特殊符號進(jìn)行表示時該怎么辦呢?不用慌,這篇文章為大家總結(jié)了python畫圖中使用各種特殊符號的方式,需要的可以參考一下
    2022-04-04
  • python源碼剖析之PyObject詳解

    python源碼剖析之PyObject詳解

    Python實現(xiàn)了完全的面向?qū)ο蟮恼Z言特性,所有的類均繼承自object基類,對應(yīng)著實現(xiàn)層面的PyObject.為了實現(xiàn)多態(tài)的特性,Python的實現(xiàn)過程維護(hù)了一個類型對象系統(tǒng),用來記錄類型信息和維護(hù)類的函數(shù)成員,本文為大家詳細(xì)介紹了PyObject,需要的朋友可以參考下
    2021-05-05
  • python與c語言的語法有哪些不一樣的

    python與c語言的語法有哪些不一樣的

    在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于python與c語法區(qū)別的相關(guān)內(nèi)容,有興趣的朋友們可以參考下。
    2020-09-09
  • python基于遞歸解決背包問題詳解

    python基于遞歸解決背包問題詳解

    這篇文章主要介紹了python基于遞歸解決背包問題,遞歸是個好東西,任何具有遞歸性質(zhì)的問題通過函數(shù)遞歸調(diào)用會變得很簡單。一個很復(fù)雜的問題,幾行代碼就能搞定,需要的朋友可以參考下
    2019-07-07
  • Python?3.x踩坑實戰(zhàn)匯總

    Python?3.x踩坑實戰(zhàn)匯總

    因項目需要最近接手維護(hù)后續(xù)python程序并做后續(xù)開發(fā),下面這篇文章主要給大家介紹了關(guān)于Python?3.x踩坑的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03

最新評論