爬蟲入門經典(六) | 一文帶你深入瞭解為什麼使用代理IP及其如何使用

不溫卜火發表於2020-10-23

  大家好,我是不溫卜火,是一名計算機學院大資料專業大三的學生,暱稱來源於成語—不溫不火,本意是希望自己性情溫和。作為一名網際網路行業的小白,博主寫部落格一方面是為了記錄自己的學習過程,另一方面是總結自己所犯的錯誤希望能夠幫助到很多和自己一樣處於起步階段的萌新。但由於水平有限,部落格中難免會有一些錯誤出現,有紕漏之處懇請各位大佬不吝賜教!暫時只在csdn這一個平臺進行更新,部落格主頁:https://buwenbuhuo.blog.csdn.net/

PS:由於現在越來越多的人未經本人同意直接爬取博主本人文章,博主在此特別宣告:未經本人允許,禁止轉載!!!

特此宣告:博主在本片博文的第一部分引用借鑑的程式猿果果《爬蟲為什麼要使用代理IP》這篇文章,感興趣的同學可以看下。


2


一、為什麼使用代理IP

14

我們在做爬蟲的過程中經常會遇到以下情況,最初爬蟲正常執行,正常抓取資料,一切看起來都是那麼美好,然而一杯茶的功夫可能就會出現錯誤,比如403 Forbidden,可能會看到“您的IP訪問頻率太高”這樣的提示。出現這種現象的原因是網站採取了一些反爬蟲措施。比如,伺服器會檢測某個IP在單位時間內的請求次數,如果超過了這個閾值,就會直接拒絕服務,返回一些錯誤資訊,這種情況可以稱為封IP。

既然伺服器檢測的是某個IP單位時間的請求次數,那麼藉助某種方式來偽裝我們的IP,讓伺服器識別不出是由我們本機發起的請求,不就可以成功防止封IP了嗎?

這個時候就用到代理IP了,說到代理IP下面就需要先基本原理、代理的作用。

1、基本原理

代理實際上指的就是代理伺服器,英文叫作proxy server,它的功能是代理網路使用者去取得網路資訊。形象地說,它是網路資訊的中轉站。在我們正常請求一個網站時,是傳送了請求給Web伺服器,Web伺服器把響應傳回給我們。如果設定了代理伺服器,實際上就是在本機和伺服器之間搭建了一個橋,此時本機不是直接向Web伺服器發起請求,而是向代理伺服器發出請求,請求會傳送給代理伺服器,然後由代理伺服器再傳送給Web伺服器,接著由代理伺服器再把Web伺服器返回的響應轉發給本機。這樣我們同樣可以正常訪問網頁,但這個過程中Web伺服器識別出的真實IP就不再是我們本機的IP了,就成功實現了IP偽裝,這就是代理的基本原理。

3

2、代理的作用

  • 突破自身IP訪問限制,訪問一些平時不能訪問的站點。
  • 訪問一些單位或團體內部資源:比如使用教育網內地址段免費代理伺服器,就可以用於對教育網開放的各類FTP下載上傳,以及各類資料查詢共享等服務。
  • 提高訪問速度:通常代理伺服器都設定一個較大的硬碟緩衝區,當有外界的資訊通過時,同時也將其儲存到緩衝區中,當其他使用者再訪問相同的資訊時,則直接由緩衝區中取出資訊,傳給使用者,以提高訪問速度。
  • 隱藏真實IP:上網者也可以通過這種方法隱藏自己的IP,免受攻擊。對於爬蟲來說,我們用代理就是為了隱藏自身IP,防止自身的IP被封鎖。

二、如何使用代理IP

15
如何使用代理IP主要看你用什麼語言寫的爬蟲,使用什麼框架,使用代理是一種基本的業務需求,基本上所有爬蟲都會內建支援。

一提到使用代理IP ,就不得不說是使用免費IP還是花錢使用高匿代理。這個東西主要還是看個人了,如果對ip要求不高,你可以選擇使用網上免費的開放代理,自己建一個程式維護一個ip池,爬取一些代理網站的免費ip,加一道測試程式,如果測試可以用,就把它收集起來供爬蟲使用。不過免費代理可用率實在是太低,而且不是很穩定,經常會失效,條件允許的話強烈建議花點錢選擇收費的私密代理。

PS:經常使用的西刺代理已經掛掉了,開啟網頁之後,我們會發現已經無法訪問了
4
便宜沒好貨,更別說免費的,免費的代理現在好用的博主暫時也不知道。不過可以找那種免費試用的。博主測試用的是芝麻代理,如果只是測試的話可以領取每日免費IP
5
下圖為獲取到的代理IP
6
好了,代理ip已經獲取完畢了,下面我們是不是需要找一個測試網站,下面博主給出一個專門測試的網站:https://httpbin.org/
7
開啟網頁之後,我們可以看到ip為本機ip,下面我們通過新增代理ip進行訪問並檢視結果。

下面通過程式碼進行實現:

# encoding: utf-8
'''
  @author 李華鑫
  @create 2020-10-06 15:57
  Mycsdn:https://buwenbuhuo.blog.csdn.net/
  @contact: 459804692@qq.com
  @software: Pycharm
  @file: 代理ip.py
  @Version:1.0
  
'''
import requests

proxies = {
    "https":"https://58.218.200.247:9934"
}

response = requests.request(method="get",url="https://httpbin.org/get",proxies=proxies)
print(response.text)

8
?,測試完畢。說明能夠使用 。下面我們再來看下剛才沒有看到的部分
9
在上述三者,以博主現在的水平並不能給出完美的解釋,不過我們直接使用獨享IP或隧道IP即可。

三、自動提取代理

上述程式碼雖然已經實現代理IP的作用,但是我們想想,如果這個IP被網站封了以後,我們再次手動重新整理會不會很麻煩,既然這樣,我們能不能讓其能夠自動提取代理呢?話不多說,開整。

想要實現自動提取代理,我們首先需要對生成的連結進行分析:

我們先通過多次重新整理 發現我們重新整理頁面需要等待3秒鐘,否則將會獲取失敗
10
分析完之後,我們再來分析連結: 再開啟連結之後,我們通過開發者選項進行檢視
11
通過檢視我們發現我們需要的ip和埠號已經找到了,這個時候我們可以通過分別提取然後通過字串拼接的方式,得到我們需要的樣式程式碼如下:

def get_proxies():
    #這裡獲取的芝麻HTTP代理http https\\
    time.sleep(3)
    proxies = {
        "http": "",
        "https": ""
    }
    response = requests.get("http://http.tiqu.alicdns.com/getip3?num=1&type=2&pro=&city=0&yys=0&port=11&time=1&ts=0&ys=0&cs=1&lb=1&sb=0&pb=45&mr=2&regions=")
    content = response.json()
    print(content)
    proxies["https"] = content["data"][0]["ip"]+":"+str(content["data"][0]["port"])
    print(proxies)
    return proxies

這是我們看下結果,是不是我們想要的:
12
13

?,完美!

分析完成,下面看下最終程式碼及效果圖:

#!/usr/bin/env python
# encoding: utf-8
'''
  @author 李華鑫
  @create 2020-10-06 16:31
  Mycsdn:https://buwenbuhuo.blog.csdn.net/
  @contact: 459804692@qq.com
  @software: Pycharm
  @file: 自動提取代理.py
  @Version:1.0
  
'''
import requests
import time

def get_proxies():
    #這裡獲取的芝麻HTTP代理http https\\
    time.sleep(3)
    proxies = {
        "http": "",
        "https": ""
    }
    response = requests.get("http://http.tiqu.alicdns.com/getip3?num=1&type=2&pro=&city=0&yys=0&port=11&time=1&ts=0&ys=0&cs=1&lb=1&sb=0&pb=45&mr=2&regions=")
    content = response.json()
    print(content)
    proxies["https"] = content["data"][0]["ip"]+":"+str(content["data"][0]["port"])
    print(proxies)
    return proxies

proxies = get_proxies()
response = requests.request(method="get",url="https://httpbin.org/get",proxies=proxies)
print(response.text)

14
17
美好的日子總是短暫的,雖然還想繼續與大家暢談,但是本篇博文到此已經結束了,如果還嫌不夠過癮,不用擔心,我們下篇見!


12

  好書不厭讀百回,熟讀課思子自知。而我想要成為全場最靚的仔,就必須堅持通過學習來獲取更多知識,用知識改變命運,用部落格見證成長,用行動證明我在努力。
  如果我的部落格對你有幫助、如果你喜歡我的部落格內容,請“點贊” “評論”“收藏”一鍵三連哦!聽說點讚的人運氣不會太差,每一天都會元氣滿滿呦!如果實在要白嫖的話,那祝你開心每一天,歡迎常來我部落格看看。
  碼字不易,大家的支援就是我堅持下去的動力。點贊後不要忘了關注我哦!

21
22

相關文章