跳到主要內容

[Python爬蟲教學]學會Python網頁爬蟲輪流或隨機使用Proxy IP發送請求的技巧

python_scraper_rotate_and_random_proxy_ip

利用Python網頁爬蟲爬取網頁資料已經是常見的資料蒐集方法之一,但是在爬取的過程中,難免擔心會不會被網站偵測或封鎖,繼[Python爬蟲教學]有效利用Python網頁爬蟲爬取免費的Proxy IP清單文章之後,看完本篇文章,你將學會如何在Python網頁爬蟲專案,透過隨機使用不同的Proxy IP發送請求,降低被偵測或封鎖的機率。實作步驟包含

  • Python網頁爬蟲讀取Proxy IP清單
  • Python網頁爬蟲使用Proxy IP
  • Python網頁爬蟲隨機使用Proxy IP

一、Python網頁爬蟲讀取Proxy IP清單

[Python爬蟲教學]有效利用Python網頁爬蟲爬取免費的Proxy IP清單文章中,假設爬到了幾組免費可用的Proxy IP,如下圖:

python_scraper_rotate_and_random_proxy_ip

這時候,在Python網頁爬蟲專案,就可以讀取其中的Proxy IP,如下範例

with open('proxy_list.txt', 'r') as file:
    proxy_ips = file.read().splitlines()
    print(proxy_ips)

執行結果

['93.158.214.162:3128', '121.244.147.137:8080', '103.124.2.229:3128']

二、Python網頁爬蟲使用Proxy IP

讀取到Proxy IP清單後,在Python網頁爬蟲專案中,就能夠透過迴圈,輪流使用其中的Proxy IP來發送請求,並且進行爬取資料的動作,如下範例

import requests
from bs4 import BeautifulSoup


with open('proxy_list.txt', 'r') as file:
    proxy_ips = file.read().splitlines()


for proxy_ip in proxy_ips:

    try:
        response = requests.get('https://www.inside.com.tw/',
                                proxies={'http': f'{proxy_ip}', 'https': f'{proxy_ip}'})

        # 爬取網頁熱門文章
        soup = BeautifulSoup(response.content, 'lxml')
        title = soup.find('a', {'class': 'hero_menu_link'}).getText()

    except:
        print('爬蟲發生錯誤!')

以上Python網頁爬蟲輪流使用不同的Proxy IP,爬取INSIDE - 社群媒體、行動網路、行銷、技術、創業網站。

PS.大家在進行範例的測試時,Proxy IP有可能因為更新而失效,如果發生錯誤,建議可以重新選擇可用的Proxy IP。

三、Python網頁爬蟲隨機使用Proxy IP

而如果想要Python網頁爬蟲「隨機」使用Proxy IP來發送請求,該如何實作呢?

這時候,就需要引用Python內建的random模組(Module),如下範例第13行

import requests
from bs4 import BeautifulSoup
import random


with open('proxy_list.txt', 'r') as file:
    proxy_ips = file.read().splitlines()


for index in range(5):  # 設定爬取的次數

    try:
        proxy_ip = random.choice(proxy_ips)  # 隨機取得Proxy IP
        print(f'使用的Proxy IP:{proxy_ip}')

        response = requests.get('https://www.inside.com.tw/',
                                proxies={'http': f'{proxy_ip}', 'https': f'{proxy_ip}'})

        # 爬取網頁熱門文章
        soup = BeautifulSoup(response.content, 'lxml')
        title = soup.find('a', {'class': 'hero_menu_link'}).getText()
        print(title)

    except:
        print('爬蟲發生錯誤!')

執行結果

python_scraper_rotate_and_random_proxy_ip

四、小結

在開發Python網頁爬蟲專案的過程中,本文和大家分享了如何輪流(Rotate)或隨機(Random)使用y自己所蒐集到的不同Proxy IP,來降低被網站偵測或封鎖的機會,當然,免費的Proxy IP不會永久有效,所以建議還是需要不斷的更新Proxy IP清單,才能夠讓Python網頁爬蟲更加穩定。

不過也提醒大家在使用免費的Proxy IP開發Python網頁爬蟲時,避免爬取需登入帳號及密碼的網站,以防有資安相關的疑慮。

而想要入門Python網頁爬蟲的讀者們,除了本站的教學文章外,也可以參考Python 網頁爬蟲入門實戰課程唷。

如果您喜歡我的文章,別忘了在下面訂閱本網站,以及幫我按五下Like(使用GoogleFacebook帳號免費註冊),支持我創作教學文章,回饋由LikeCoin基金會出資,完全不會花到錢,感謝大家。

有想要看的教學內容嗎?歡迎利用以下的Google表單讓我知道,將有機會成為教學文章,分享給大家😊

Python學習資源
Python網頁爬蟲推薦課程
    Python非同步網頁爬蟲
    Python網頁爬蟲應用
    Python網頁爬蟲部署
    Python網頁爬蟲資料儲存
    Python網頁爬蟲技巧









    留言