python爬取可用的代理ip(python爬蟲代做)

  • 1、「2022 年」崔慶才 Python3 爬蟲教程 – 代理的使用方法
  • 2、爬蟲如何選用合適的代理IP
  • 3、python 爬蟲 ip池怎麼做
  • 4、分散式爬蟲用哪家免費代理IP好
  • 5、python爬蟲應該怎樣使用代理IP
  • 6、python中,進行爬蟲抓取怎麼樣能夠使用代理IP?

前面我們介紹了多種請求庫,如 urllib、requests、Selenium、Playwright 等用法,但是沒有統一梳理代理的設置方法,本節我們來針對這些庫來梳理下代理的設置方法。

在本節開始之前,請先根據上一節了解一下代理的基本原理,了解了基本原理之後我們可以更好地理解和學習本節的內容。

另外我們需要先獲取一個可用代理,代理就是 IP 地址和埠的組合,就是 : 這樣的格式。如果代理需要訪問認證,那就還需要額外的用戶名密碼兩個信息。

那怎麼獲取一個可用代理呢?

使用搜索引擎搜索 「代理」 關鍵字,可以看到許多代理服務網站,網站上會有很多免費或付費代理,比如快代理的免費 HTTP 代理: 上面就寫了很多免費代理,但是這些免費代理大多數情況下並不一定穩定,所以比較靠譜的方法是購買付費代理。付費代理的各大代理商家都有套餐,數量不用多,穩定可用即可,我們可以自行選購。

另外除了購買付費 HTTP 代理,我們也可以在本機配置一些代理軟體,具體的配置方法可以參考 ,軟體運行之後會在本機創建 HTTP 或 SOCKS 代理服務,所以代理地址一般都是 127.0.0.1: 這樣的格式,不同的軟體用的埠可能不同。

這裡我的本機安裝了一部代理軟體,它會在本地 7890 埠上創建 HTTP 代理服務,即代理為 127.0.0.1:7890。另外,該軟體還會在 7891 埠上創建 SOCKS 代理服務,即代理為 127.0.0.1:7891,所以只要設置了這個代理,就可以成功將本機 IP 切換到代理軟體連接的伺服器的 IP 了。

在本章下面的示例里,我使用上述代理來演示其設置方法,你也可以自行替換成自己的可用代理。

設置代理後,測試的網址是 ,訪問該鏈接我們可以得到請求的相關信息,其中返回結果的 origin 欄位就是客戶端的 IP,我們可以根據它來判斷代理是否設置成功,即是否成功偽裝了 IP。

好,接下來我們就來看下各個請求庫的代理設置方法吧。

首先我們以最基礎的 urllib 為例,來看一下代理的設置方法,代碼如下:

運行結果如下:

這裡我們需要藉助 ProxyHandler 設置代理,參數是字典類型,鍵名為協議類型,鍵值是代理。注意,此處代理前面需要加上協議,即 http:// 或者 https://,當請求的鏈接是 HTTP 協議的時候,會使用 http 鍵名對應的代理,當請求的鏈接是 HTTPS 協議的時候,會使用 https 鍵名對應的代理。不過這裡我們把代理本身設置為了 HTTP 協議,即前綴統一設置為了 http://,所以不論訪問 HTTP 還是 HTTPS 協議的鏈接,都會使用我們配置的 HTTP 協議的代理進行請求。

創建完 ProxyHandler 對象之後,我們需要利用 build_opener 方法傳入該對象來創建一個 Opener,這樣就相當於此 Opener 已經設置好代理了。接下來直接調用 Opener 對象的 open 方法,即可訪問我們所想要的鏈接。

運行輸出結果是一個 JSON,它有一個欄位 origin,標明了客戶端的 IP。驗證一下,此處的 IP 確實為代理的 IP,並不是真實的 IP。這樣我們就成功設置好代理,並可以隱藏真實 IP 了。

如果遇到需要認證的代理,我們可以用如下的方法設置:

這裡改變的只是 proxy 變數,只需要在代理前面加入代理認證的用戶名密碼即可,其中 username 就是用戶名,password 為密碼,例如 username 為 foo,密碼為 bar,那麼代理就是 foo:bar@127.0.0.1:7890。

如果代理是 SOCKS5 類型,那麼可以用如下方式設置代理:

此處需要一個 socks 模塊,可以通過如下命令安裝:

這裡需要本地運行一個 SOCKS5 代理,運行在 7891 埠,運行成功之後和上文 HTTP 代理輸出結果是一樣的:

結果的 origin 欄位同樣為代理的 IP,代理設置成功。

對於 requests 來說,代理設置非常簡單,我們只需要傳入 proxies 參數即可。

這裡以我本機的代理為例,來看下 requests 的 HTTP 代理設置,代碼如下:

運行結果如下:

和 urllib 一樣,當請求的鏈接是 HTTP 協議的時候,會使用 http 鍵名對應的代理,當請求的鏈接是 HTTPS 協議的時候,會使用 https 鍵名對應的代理,不過這裡統一使用了 HTTP 協議的代理。

運行結果中的 origin 若是代理伺服器的 IP,則證明代理已經設置成功。

如果代理需要認證,那麼在代理的前面加上用戶名和密碼即可,代理的寫法就變成如下所示:

這裡只需要將 username 和 password 替換即可。

如果需要使用 SOCKS 代理,則可以使用如下方式來設置:

這裡我們需要額外安裝一個包 requests[socks],相關命令如下所示:

運行結果是完全相同的:

另外,還有一種設置方式,即使用 socks 模塊,也需要像上文一樣安裝 socks 庫。這種設置方法如下所示:

使用這種方法也可以設置 SOCKS 代理,運行結果完全相同。相比第一種方法,此方法是全局設置的。我們可以在不同情況下選用不同的方法。

httpx 的用法本身就與 requests 的使用非常相似,所以其也是通過 proxies 參數來設置代理的,不過與 requests 不同的是,proxies 參數的鍵名不能再是 http 或 https,而需要更改為 http:// 或 https://,其他的設置是一樣的。

對於 HTTP 代理來說,設置方法如下:

對於需要認證的代理,也是改下 proxy 的值即可:

這裡只需要將 username 和 password 替換即可。

運行結果和使用 requests 是類似的,結果如下:

對於 SOCKS 代理,我們需要安裝 httpx-socks 庫,安裝方法如下:

這樣會同時安裝同步和非同步兩種模式的支持。

對於同步模式,設置方法如下:

對於非同步模式,設置方法如下:

和同步模式不同的是,transport 對象我們用的是 AsyncProxyTransport 而不是 SyncProxyTransport,同時需要將 Client 對象更改為 AsyncClient 對象,其他的不變,運行結果是一樣的。

Selenium 同樣可以設置代理,這裡以 Chrome 為例來介紹其設置方法。

對於無認證的代理,設置方法如下:

運行結果如下:

代理設置成功,origin 同樣為代理 IP 的地址。

如果代理是認證代理,則設置方法相對比較繁瑣,具體如下所示:

這裡需要在本地創建一個 manifest.json 配置文件和 background.js 腳本來設置認證代理。運行代碼之後,本地會生成一個 proxy_auth_plugin.zip 文件來保存當前配置。

運行結果和上例一致,origin 同樣為代理 IP。

SOCKS 代理的設置也比較簡單,把對應的協議修改為 socks5 即可,如無密碼認證的代理設置方法為:

運行結果是一樣的。

對於 aiohttp 來說,我們可以通過 proxy 參數直接設置。HTTP 代理設置如下:

如果代理有用戶名和密碼,像 requests 一樣,把 proxy 修改為如下內容:

這裡只需要將 username 和 password 替換即可。

對於 SOCKS 代理,我們需要安裝一個支持庫 aiohttp-socks,其安裝命令如下:

我們可以藉助於這個庫的 ProxyConnector 來設置 SOCKS 代理,其代碼如下:

運行結果是一樣的。

另外,這個庫還支持設置 SOCKS4、HTTP 代理以及對應的代理認證,可以參考其官方介紹。

對於 Pyppeteer 來說,由於其默認使用的是類似 Chrome 的 Chromium 瀏覽器,因此其設置方法和 Selenium 的 Chrome 一樣,如 HTTP 無認證代理設置方法都是通過 args 來設置的,實現如下:

運行結果如下:

同樣可以看到設置成功。

SOCKS 代理也一樣,只需要將協議修改為 socks5 即可,代碼實現如下:

運行結果也是一樣的。

相對 Selenium 和 Pyppeteer 來說,Playwright 的代理設置更加方便,其預留了一個 proxy 參數,可以在啟動 Playwright 的時候設置。

對於 HTTP 代理來說,可以這樣設置:

在調用 launch 方法的時候,我們可以傳一個 proxy 參數,是一個字典。字典有一個必填的欄位叫做 server,這裡我們可以直接填寫 HTTP 代理的地址即可。

運行結果如下:

對於 SOCKS 代理,設置方法也是完全一樣的,我們只需要把 server 欄位的值換成 SOCKS 代理的地址即可:

運行結果和剛才也是完全一樣的。

對於有用戶名和密碼的代理,Playwright 的設置也非常簡單,我們只需要在 proxy 參數額外設置 username 和 password 欄位即可,假如用戶名和密碼分別是 foo 和 bar,則設置方法如下:

這樣我們就能非常方便地為 Playwright 實現認證代理的設置。

以上我們就總結了各個請求庫的代理使用方式,各種庫的設置方法大同小異,學會了這些方法之後,以後如果遇到封 IP 的問題,我們可以輕鬆通過加代理的方式來解決。

本節代碼:

在使用爬蟲多次爬取同一網站時,經常會被網站的IP反爬蟲機制給禁掉,為了解決封禁IP的問題通常會使用閃臣代理。軟體代理推薦選擇閃臣代理。【點擊進官網註冊免費試用】

爬蟲選用合適的代理IP會注意以下幾點:

1、使用透明代理和普通匿名代理會被目標網站得知使用了代理IP,自然會受到限制,高級匿名代理則不會,所以在選擇代理IP的時候會注意到這點。

2、使用一個代理IP爬取目標網站,被封IP的因素太多,當達到了閾值後,IP就會被封;當訪問目標網站的頻率過快時,IP也會被封,因為人類正常訪問遠遠達不到那個頻率,自然會被目標網站的反爬蟲策略識別。

3、選擇高抓取ip,100萬高匿名IP,可以輕鬆抓取企業信息、分類信息、房地產信息、電商信息。

想要了解更多關於ip代理的相關信息,推薦諮詢閃臣代理。閃臣代理是一款高速穩定修改ip地址的軟體。支持一個賬號同時使用多個終端。用戶可指定應用程序進行單進程代理。閃臣代理擁有自建機房高匿名代理IP,全國真實IP訪問,快速提升APP的關鍵詞覆蓋,排名,完成高評分和好評論,打造APP好口碑,提高用戶轉化。

我們先來了解下Python中高層次的數據結構,動態類型和動態綁定,使得它非常適合於快速應用開發,也適合於作為膠水語言連接已有的軟體部件。用Python搭建一個可用的代理IP池其實並不難的。下面我們來看看搭建一個可用的代理IP池的代碼,可以分為以下的模塊:

1、ProxyGetter,代理獲取的相關代碼,可以抓取網站上的免費代理,經測試每天更新的可用代理只有六七十個,當然也支持自己擴展代理介面。

2、Api,api介面相關代碼,目前api是由Flask實現,代碼也非常簡單。客戶端請求傳給Flask,Flask調用ProxyManager中的實現,包括get/delete/refresh/get_all。

3、Util,存放一些公共的模塊方法或函數,包含GetConfig:讀取配置文件config.ini的類,ConfigParse:集成重寫ConfigParser的類,使其對大小寫敏感,Singleton:實現單例,LazyProperty:實現類屬性惰性計算。

4、DB,資料庫相關代碼,目前資料庫是採用SSDB。代碼用工廠模式實現,方便日後擴展其他類型資料庫。

5、Schedule,定時任務相關代碼,現在只是實現定時去刷新代碼,並驗證可用代理,採用多進程方式。

6、Manager,get/delete/refresh/get_all等介面的具體實現類,目前代理池只負責管理proxy,日後可能會有更多功能,比如代理和爬蟲的綁定,代理和賬號的綁定等等。

7、其他文件,配置文件:Config.ini,資料庫配置和代理獲取介面配置,可以在GetFreeProxy中添加新的代理獲取方法,並在Config.ini中註冊即可使用。大家平常搭建一個可用的代理IP池也是按照這些的方法嗎?如果不是,也可以參考下的。如果想快捷方便有效可以使用http,IPIDEA全球http每日9000w的IP量包含全球240+地區的ip,足以符合需求量大的標準。

IP地址各位基本都是了解的,這兒簡單的介紹一下定義。IP地址指的是互聯網協議地址,簡易的說便是互聯網分配給網路設備的門牌號,為了能更好地使網路中的計算機能夠互相訪問,而且了解對方是誰。

很多時候在我們要想保護自身網路訪問安全性指數,或是突破目標網站IP限制,就一定要通過特殊方法來實現,這就是代理IP。代理ip在我們的日常生活中使用得十分廣,尤其是在在分散式爬蟲行業,現階段市面上較為常見的代理IP有免費的和收費的兩種,在這兒不推薦分散式爬蟲用免費代理IP,這是為什麼呢?原因有三點:

一、資源貧乏:網路中真真正正能用的免費代理ip總數並沒有很多,不能滿足分散式爬蟲對於代理IP的大量需求。

二、IP不穩定:免費代理ip沒有專業人員維護,而且任何一個人都能夠使用,當然影響IP連接效果。

三、隱匿性不高:隱匿性指能夠隱藏真實IP地址的成都,隱匿性越高,安全性越高。而免費代理ip在這方面是薄弱的。

先網站上在線提取代理IP,提取數量、代理協議、埠位數等都可以自定義

請點擊輸入圖片描述

然後 生成api鏈接,複製或打開鏈接,就可以使用提取的ip了

請點擊輸入圖片描述

網路數據量越來越大,從網頁中獲取信息變得越來越困難,如何有效地抓取並利用信息,已成為網路爬蟲一個巨大的挑戰。下面IPIDEA為大家講明爬蟲代理IP的使用方法。

1. 利用爬蟲腳本每天定時爬取代理網站上的ip,寫入MongoDB或者其他的資料庫中,這張表作為原始表。

2. 使用之前需要做一步測試,就是測試這個ip是否有效,方法就是利用curl訪問一個網站查看返回值,需要創建一張新表,循環讀取原始表有效則插入,驗證之後將其從原始表中刪除,驗證的同時能夠利用響應時間來計算這個ip的質量,和最大使用次數,有一個演算法能夠參考一種基於連接代理優化管理的多線程網路爬蟲處理方法。

3. 把有效的ip寫入ip代理池的配置文件,重新載入配置文件。

4.讓爬蟲程序去指定的dailiy的服務ip和埠,進行爬取。

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
JIOFV的頭像JIOFV
上一篇 2024-10-03 23:07
下一篇 2024-10-03 23:07

相關推薦

  • Python中引入上一級目錄中函數

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

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

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

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

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

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

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

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

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

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

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

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

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

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

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

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

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

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

    編程 2025-04-29

發表回復

登錄後才能評論