最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python做反被爬保護的方法

 更新時間:2019年07月01日 15:54:14   作者:(*-*)浩  
在本文里小編給大家整理了一篇關于python做反被爬保護的方法的方法,由此需求的同學參考學習下。

網(wǎng)絡爬蟲,是一個自動提取網(wǎng)頁的程序,它為搜索引擎從萬維網(wǎng)上下載網(wǎng)頁,是搜索引擎的重要組成。但是當網(wǎng)絡爬蟲被濫用后,互聯(lián)網(wǎng)上就出現(xiàn)太多同質(zhì)的東西,原創(chuàng)得不到保護。于是,很多網(wǎng)站開始反網(wǎng)絡爬蟲,想方設法保護自己的內(nèi)容。

一: User-Agent +Referer檢測

User-Agent 是HTTP協(xié)議的中的一個字段, 其作用是描述發(fā)出HTTP請求的終端的一些信息。

使得服務器能夠識別客戶使用的操作系統(tǒng)及版本、CPU 類型、瀏覽器及版本、瀏覽器渲染引擎、瀏覽器語言、瀏覽器插件等。

服務器通過這個字段就可以知道訪問網(wǎng)站的是什么人。對于不是正常瀏覽器的用戶進行屏蔽。

解決方案:

偽裝瀏覽器的User-Agent,因為每個瀏覽器的User-Agent不一樣,并且所有的用戶都能使用瀏覽器。所有每次請求的時候條件瀏覽器的User-Agent,就能解決UA檢測

Referer是header的一部分,當瀏覽器向web服務器發(fā)送請求的時候,一般會帶上Referer,告訴服務器我是從哪個頁面鏈接過來的。例如有一些圖片網(wǎng)站在你請求圖片的時候,就會檢測你的Referer值,如果Referer不符合,不會返回正常的圖片。

解決方案:

在檢測referer的請求中,攜帶符合的referer值。

二: js混淆和渲染

所謂 JavaScript 混淆,基本就是:

1.去掉一些實際沒有調(diào)用的函數(shù)。

2.將零散的變量聲明合并。

3.邏輯函數(shù)的精簡。

4.變量名的簡化。具體要看不同的壓縮工具的考慮優(yōu)劣。常見的有UglifyJS、JScrambler等工具。

js渲染其實就是對HTML頁面的修改。比如有一些網(wǎng)頁本身沒有返回數(shù)據(jù),數(shù)據(jù)是經(jīng)過js加載之后添加到HTML當中的。當遇到這種情況的時候,我們要知道爬蟲是不會執(zhí)行JavaScript操作。所以需要用其他的方法處理。

解決方案:

1.通過閱讀網(wǎng)站js源碼,找到關鍵的代碼,并用python實現(xiàn)。

2.通過閱讀網(wǎng)站js源碼,找到關鍵的代碼,用PyV8,execjs等庫直接執(zhí)行js代碼。

3.通過selenium庫直接模擬瀏覽器環(huán)境

三:IP限制頻次

WEB系統(tǒng)都是走http協(xié)議跟WEB容器連通的,每次請求至少會產(chǎn)生一次客戶端與服務器的tcp連接。

對于服務端來說可以很清楚的查看到,一個ip地址在單位時間內(nèi)發(fā)起的請求。

當請求數(shù)超過一定的值之后,就可判斷為非正常的用戶請求。

解決方案:

1.自行設計ip代理池,通過輪換的方式,每次請求攜帶不同的代理地址。

2.ADSL動態(tài)撥號他有個獨有的特點,每撥一次號,就獲取一個新的IP。也就是它的IP是不固定的。

四:驗證碼

驗證碼(CAPTCHA)是“Completely Automated PublicTuring test to tell Computers and HumansApart”(全自動區(qū)分計算機和人類的圖靈測試)的縮寫,是一種區(qū)分用戶是計算機還是人的公共全自動程序。

可以防止:惡意破解密碼、刷票、論壇灌水,有效防止某個黑客對某一個特定注冊用戶用特定程序暴力破解方式進行不斷的登陸嘗試。

這個問題可以由計算機生成并評判,但是必須只有人類才能解答。由于計算機無法解答CAPTCHA的問題,所以回答出問題的用戶就可以被認為是人類。

解決方案:

1.手動識別驗證碼

2.pytesseract識別簡單的驗證碼

3.對接打碼平臺

4.機器學習

擴展知識:

基于反爬的相關實例代碼:

#! /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])
#! /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()

相關文章

  • Python?Selenium無法打開Chrome瀏覽器處理自定義瀏覽器路徑的問題及解決方法

    Python?Selenium無法打開Chrome瀏覽器處理自定義瀏覽器路徑的問題及解決方法

    Python?Selenium控制Chrome瀏覽器的過程中,由于安裝的Chrome瀏覽器的版本找不到對應版本的驅(qū)動chromedriver.exe文件,下載了小幾個版本號的驅(qū)動軟件都無法正常使用,下面通過本文介紹Python?Selenium無法打開Chrome瀏覽器處理自定義瀏覽器路徑的問題,需要的朋友可以參考下
    2024-08-08
  • python根據(jù)時間獲取周數(shù)代碼實例

    python根據(jù)時間獲取周數(shù)代碼實例

    這篇文章主要介紹了python根據(jù)時間獲取周數(shù),通過周數(shù)獲取時間代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • 使用gunicorn部署django項目的問題

    使用gunicorn部署django項目的問題

    這篇文章主要介紹了使用gunicorn部署django項目,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • 解決jupyter不是內(nèi)部或外部命令,也不是可運行程序問題

    解決jupyter不是內(nèi)部或外部命令,也不是可運行程序問題

    這篇文章主要介紹了解決jupyter不是內(nèi)部或外部命令,也不是可運行程序問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 基于Python實現(xiàn)自動用小寫字母替換文件后綴的大寫字母

    基于Python實現(xiàn)自動用小寫字母替換文件后綴的大寫字母

    本文介紹基于Python語言,基于一個大文件夾,遍歷其中的多個子文件夾,對于每一個子文件夾中的大量文件,批量將其文件的名稱或后綴名中的字母由大寫修改為小寫的方法,文中有相關的代碼示例供大家參考,需要的朋友可以參考下
    2024-04-04
  • Flask中Cookie和Session理解與作用介紹

    Flask中Cookie和Session理解與作用介紹

    Flask是一個使用 Python 編寫的輕量級 Web 應用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎則使用 Jinja2 。Flask使用 BSD 授權。Flask也被稱為 “microframework” ,因為它使用簡單的核心,用 extension 增加其他功能,F(xiàn)lask中Cookie和Session有什么區(qū)別呢
    2022-10-10
  • python之plt.hist函數(shù)的輸入?yún)?shù)和返回值的用法解釋

    python之plt.hist函數(shù)的輸入?yún)?shù)和返回值的用法解釋

    這篇文章主要介紹了python之plt.hist函數(shù)的輸入?yún)?shù)和返回值的用法解釋,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Python爬蟲框架scrapy實現(xiàn)的文件下載功能示例

    Python爬蟲框架scrapy實現(xiàn)的文件下載功能示例

    這篇文章主要介紹了Python爬蟲框架scrapy實現(xiàn)的文件下載功能,結合實例形式分析了scrapy框架進行文件下載的具體操作步驟與相關實現(xiàn)技巧,需要的朋友可以參考下
    2018-08-08
  • 使用Python腳本生成隨機IP的簡單方法

    使用Python腳本生成隨機IP的簡單方法

    這篇文章主要介紹了使用Python腳本生成隨機IP的簡單方法,并且可以自己設定IP數(shù)值范圍,需要的朋友可以參考下
    2015-07-07
  • python?flask項目打包成docker鏡像發(fā)布的過程

    python?flask項目打包成docker鏡像發(fā)布的過程

    這篇文章主要介紹了python?flask項目打包成docker鏡像發(fā)布,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03

最新評論

南溪县| 固始县| 西乌| 宜城市| 菏泽市| 舟山市| 翁牛特旗| 长治市| 龙游县| 吴桥县| 石门县| 临潭县| 高州市| 闻喜县| 惠州市| 桦川县| 永靖县| 怀远县| 昭觉县| 利津县| 原阳县| 余姚市| 句容市| 方城县| 渝北区| 湾仔区| 尉犁县| 太和县| 阳高县| 宁波市| 安远县| 岳阳市| 武平县| 嫩江县| 合水县| 田阳县| 慈溪市| 蒲江县| 鄂伦春自治旗| 沭阳县| 易门县|