python之js反爬,js反爬蟲

本文目錄一覽:

python爬蟲中怎麼寫反爬蟲

1、通過UA判斷:UA是UserAgent,是要求瀏覽器的身份標誌。

UA是UserAgent,是要求瀏覽器的身份標誌。反爬蟲機制通過判斷訪問要求的頭部沒有UA來識別爬蟲,這種判斷方法水平很低,通常不作為唯一的判斷標準。反爬蟲非常簡單,可以隨機數UA。

2、通過Cookie判定:Cookie是指會員帳戶密碼登錄驗證

Cookie是指會員帳戶密碼登錄驗證,通過區分該帳戶在短時間內爬行的頻率來判斷。這種方法的反爬蟲也很困難,需要多賬戶爬行。

3、通過訪問頻率判定

爬蟲類經常在短時間內多次訪問目標網站,反爬蟲類機制可以通過單個IP訪問的頻率來判斷是否是爬蟲類。這樣的反爬方式難以反制,只能通過更換IP來解決。

4、通過驗證碼判定

驗證碼是反爬蟲性價比高的實施方案。反爬蟲通常需要訪問OCR驗證碼識別平台,或者使用TesseractOCR識別,或者使用神經網絡訓練識別驗證碼。

5、動態性頁面加載

使用動態加載的網站通常是為了方便用戶點擊和查看,爬蟲無法與頁面互動,這大大增加了爬蟲的難度。

一般情況下,用戶對網站進行信息爬取時,都要受到“爬蟲”的約束,使用戶在獲取信息時受到一定的阻礙

15《Python 原生爬蟲教程》爬蟲和反爬蟲

有的時候,當我們的爬蟲程序完成了,並且在本地測試也沒有問題,爬取了一段時間之後突然就發現報錯無法抓取頁面內容了。這個時候,我們很有可能是遇到了網站的反爬蟲攔截。

我們知道,網站一方面想要爬蟲爬取網站,比如讓搜索引擎爬蟲去爬取網站的內容,來增加網站的搜索排名。另一方面,由於網站的服務器資源有限,過多的非真實的用戶對網站的大量訪問,會增加運營成本和服務器負擔。

這是一種最基本的反爬蟲方式,網站運營者通過驗證爬蟲的請求頭的 User-agent,accep-enconding 等信息來驗證請求的發出宿主是不是真實的用戶常用瀏覽器或者一些特定的請求頭信息。

通過 Ajax,或 者javascript 來動態獲取和加載數據,加大爬蟲直接獲取數據的難度。

這個相信大多數讀者非常熟悉了吧,當我們輸錯多次密碼的時候,很多平台都會彈出各種二維碼讓我們識別,或者搶火車票的時候,會出現各種複雜的驗證碼,驗證碼是反爬蟲措施中,運用最廣,同時也是最有效直接的方式來阻止爬蟲的措施之一。

在識別到某些異常的訪問的時候,網站運營者會設置一個黑名單,把一些判定為爬蟲的IP進行限制或者封殺。

有些網站,沒有遊客模式,只有通過註冊後才可以登錄看到內容,這個就是典型的使用賬號限制網站,一般可以用在網站用戶量不多,數據安全要求嚴格的網站中。

我們可以在請求頭中替換我們的請求媒介,讓網站誤認為是我們是通過移動端的訪問,運行下面的代碼後,當我們打開 hupu.html,我們會發現返回的是移動端的虎撲的頁面而不是網頁端的。

比如,我們可以設置一個隨機的間隔時間,來模擬用戶的行為,減少訪問的次數和頻率。 我們可以在我們爬蟲的程序中,加入如下的代碼,讓爬蟲休息3秒左右,再進行爬取,可以有效地避開網站的對爬蟲的檢測和識別。

代理就是通過訪問第三方的機器,然後通過第三方機器的 IP 進行訪問,來隱藏自己的真實IP地址。

由於第三方代理良莠不齊,而且不穩定,經常出現斷線的情況,爬取速度也會慢許多,如果對爬蟲質量有嚴格要求的話,不建議使用此種方法進行爬取。

可以通過動態的 IP 撥號服務器來變換 IP,也可以通過 Tor 代理服務器來變換 IP。

反反爬蟲的策略,一直是在變換的,我們應該具體問題具體分析,通過不斷的試錯來完善我們的爬蟲爬取,千萬不要以為,爬蟲程序在本機調試之後,沒有問題,就可以高枕無憂了。線上的問題,總是千變萬化,我們需要根據我們的具體反爬措施,來針對的寫一些反反爬蟲的代碼,這樣才能保證線上環境的萬無一失。

python爬蟲有什麼辦法防止反爬蟲

動態頁面的限制,爬蟲工作者可能會遇到這樣的尷尬,當你抓取下目標頁面之後,你發現,關鍵信息處一片空白,只有密密麻麻一片的框架代碼,這是因為該網站的信息是通過用戶Post的XHR動態返回內容信息,解決這種問題就是要通過開發者工具(FireBug等)對網站流進行分析,對內容信息進行抓取,獲取所需要的內容。

用戶行為檢測,有一些是網站通過檢測和分析一些用戶的行為,比如說是針對cookies,通過檢查cookies來判斷用戶是不是可以利用和保存的有效客戶,通常是需要登陸的網站,經常會採用這樣的技術。層次再深的還有,信息驗證,部分網站的登陸是需要驗證嗎的驗證的,就像登陸的時候,系統會自動分配出驗證碼,authenticity_token,authenticity_token會和用戶提交的登錄名和密碼一起發送回服務器。

IP的訪問頻率被限制,一些平台為了防止多次訪問網站,會在某個同一個IP在單元時間內超過一定的次數的時候,將禁止這個IP繼續訪問。對於這個限制IP訪問效率,可以使用代理IP的方法來解決問題比如使用IPIDEA。

以上簡單的說了三種常見的反爬蟲已經反爬蟲的應對方法,一般來講越高級的爬蟲被封鎖的機率救會越低,但是性能會比較低一些。

python好學么?應用最多的是哪方面?

相較於其他編程語言來說,Python簡單易學,同樣一個程序,使用C可能需要1000行代碼,使用Java需要100行代碼,而使用Python則只需要20行代碼。所以說更適合新手學習,也算是比較好學的。

就業方向主要有:

01爬蟲方向

感覺python就是天然為爬蟲而生,有些靠人力一星期才能完成的工作,學完Python後,你泡着咖啡、跑10分鐘爬蟲即可輕鬆完成,So

easy!學會Python爬蟲後,即使不做程序員相關的工作,也能為你加分不少。

技能要求:前端基礎、Python爬蟲庫、數據庫、JS反爬等

02數據分析方向

學會了爬蟲,便有了數據來源,運用這些數據以及相應的爬蟲庫和excel表格,就可以進行簡單的數據分析。在大量數據的基礎上,結合科學計算、機器學習等技術,對數據進行清洗、去重、規格化和針對性的分析是大數據行業的基石。

技能要求:統計學基礎、Python的數據分析庫、數據庫、機器學習框架

03Web開發(Python後端)方向

如果初次轉行可以走這個方向,一是工作崗位多,相對好找工作,二是學成周期短。Python有很多優秀的Web開發框架,可以幫助你快速搭建一個網站。像知乎、小米等大廠,最早的網站都是用

Python 搭建的。

技能要求:前端基礎、Python基礎、主流Python Web框架、數據庫等

04人工智能方向

人工智能是近幾年發展勢頭大好的新行業,是在Python語言的基礎上再做開發,是研究、開發用於模擬、延伸和擴展人的智能的理論、方法、技術及應用系統的新興技術。

技能要求:統計學基礎、Python、數據分析庫、機器學習、深度學習框架

05自動化運維方向

運維工程師經常要監控上百台機器的運行,或同時部署的情況。使用Python可以自動化批量管理服務器,起到1個人頂10個人的效果。自動化運維也是Python的主要應用方向之一,它在系統管理、文檔管理方面都有很強大的功能。

技能要求:Python、shell、Linux、數據庫、openpyxl庫等

其實,這些關鍵性因素取決於你所學的知識和學習內容的掌握程度如何,如果你想在眾多的求職者中取得優勢,還是需要在Python技能上有突出。

希望能給你帶來參考!

如何使用python解決網站的反爬蟲

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)

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

Python爬取知乎與我所理解的爬蟲與反爬蟲

關於知乎驗證碼登陸的問題,用到了Python上一個重要的圖片處理庫PIL,如果不行,就把圖片存到本地,手動輸入。

通過對知乎登陸是的抓包,可以發現登陸知乎,需要post三個參數,一個是賬號,一個是密碼,一個是xrsf。

這個xrsf隱藏在表單裡面,每次登陸的時候,應該是服務器隨機產生一個字符串。所有,要模擬登陸的時候,必須要拿到xrsf。

用chrome (或者火狐 httpfox 抓包分析)的結果:

所以,必須要拿到xsrf的數值,注意這是一個動態變化的參數,每次都不一樣。

拿到xsrf,下面就可以模擬登陸了。

使用requests庫的session對象,建立一個會話的好處是,可以把同一個用戶的不同請求聯繫起來,直到會話結束都會自動處理cookies。

注意:cookies 是當前目錄的一個文件,這個文件保存了知乎的cookie,如果是第一個登陸,那麼當然是沒有這個文件的,不能通過cookie文件來登陸。必須要輸入密碼。

這是登陸的函數,通過login函數來登陸,post 自己的賬號,密碼和xrsf 到知乎登陸認證的頁面上去,然後得到cookie,將cookie保存到當前目錄下的文件裡面。下次登陸的時候,直接讀取這個cookie文件。

這是cookie文件的內容

以下是源碼:

運行結果:

反爬蟲最基本的策略:

爬蟲策略:

這兩個都是在http協議的報文段的檢查,同樣爬蟲端可以很方便的設置這些字段的值,來欺騙服務器。

反爬蟲進階策略:

1.像知乎一樣,在登錄的表單裡面放入一個隱藏字段,裡面會有一個隨機數,每次都不一樣,這樣除非你的爬蟲腳本能夠解析這個隨機數,否則下次爬的時候就不行了。

2.記錄訪問的ip,統計訪問次數,如果次數太高,可以認為這個ip有問題。

爬蟲進階策略:

1.像這篇文章提到的,爬蟲也可以先解析一下隱藏字段的值,然後再進行模擬登錄。

2.爬蟲可以使用ip代理池的方式,來避免被發現。同時,也可以爬一會休息一會的方式來降低頻率。另外,服務器根據ip訪問次數來進行反爬,再ipv6沒有全面普及的時代,這個策略會很容易造成誤傷。(這個是我個人的理解)。

通過Cookie限制進行反爬蟲:

和Headers校驗的反爬蟲機制類似,當用戶向目標網站發送請求時,會再請求數據中攜帶Cookie,網站通過校驗請求信息是否存在Cookie,以及校驗Cookie的值來判定發起訪問請求的到底是真實的用戶還是爬蟲,第一次打開網頁會生成一個隨機cookie,如果再次打開網頁這個Cookie不存在,那麼再次設置,第三次打開仍然不存在,這就非常有可能是爬蟲在工作了。

反爬蟲進進階策略:

1.數據投毒,服務器在自己的頁面上放置很多隱藏的url,這些url存在於html文件文件裡面,但是通過css或者js使他們不會被顯示在用戶看到的頁面上面。(確保用戶點擊不到)。那麼,爬蟲在爬取網頁的時候,很用可能取訪問這個url,服務器可以100%的認為這是爬蟲乾的,然後可以返回給他一些錯誤的數據,或者是拒絕響應。

爬蟲進進階策略:

1.各個網站雖然需要反爬蟲,但是不能夠把百度,谷歌這樣的搜索引擎的爬蟲給幹了(幹了的話,你的網站在百度都說搜不到!)。這樣爬蟲應該就可以冒充是百度的爬蟲去爬。(但是ip也許可能被識破,因為你的ip並不是百度的ip)

反爬蟲進進進階策略:

給個驗證碼,讓你輸入以後才能登錄,登錄之後,才能訪問。

爬蟲進進進階策略:

圖像識別,機器學習,識別驗證碼。不過這個應該比較難,或者說成本比較高。

參考資料:

廖雪峰的python教程

靜覓的python教程

requests庫官方文檔

segmentfault上面有一個人的關於知乎爬蟲的博客,找不到鏈接了

原創文章,作者:IXTT,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/149876.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
IXTT的頭像IXTT
上一篇 2024-11-05 16:54
下一篇 2024-11-05 16:54

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • JS Proxy(array)用法介紹

    JS Proxy(array)可以說是ES6中非常重要的一個特性,它可以代理一個數組,監聽數據變化並進行攔截、處理。在實際開發中,使用Proxy(array)可以方便地實現數據的監…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29

發表回復

登錄後才能評論