Python爬虫实战技巧:如何在爬取过程中动态切换代理IP

发布时间:2024年01月04日

目录

前言

第一步:获取代理IP列表

第二步:测试代理IP的可用性

第三步:动态切换代理IP

总结



前言

在进行爬虫开发的过程中,有时候需要使用代理IP来访问目标网站,以避免被封IP或者降低访问频率的限制。本文将介绍如何在Python爬虫中动态切换代理IP,以提高爬取效率和匿名性。

第一步:获取代理IP列表

在动态切换代理IP的过程中,首先需要获取一些可用的代理IP列表。有很多免费代理IP网站可以提供这样的服务,例如站大爷代理IP(https://www.zdaye.com/)等。这些网站通常提供免费的代理IP列表,并且会标明代理IP的匿名性、类型(HTTP、HTTPS等)、服务器所在地等信息。

以下是一个获取代理IP列表的示例代码:

import requests
from bs4 import BeautifulSoup

def get_proxy_list(url):
? ? proxies = []
? ? response = requests.get(url)
? ? soup = BeautifulSoup(response.text, 'html.parser')
? ??
? ? table = soup.find('table', attrs={'class': 'table table-bordered table-striped'})
? ? rows = table.find_all('tr')
? ??
? ? for row in rows[1:]:
? ? ? ? cells = row.find_all('td')
? ? ? ? proxy = {
? ? ? ? ? ? 'ip': cells[0].text.strip(),
? ? ? ? ? ? 'port': cells[1].text.strip(),
? ? ? ? ? ? 'type': cells[3].text.strip(),
? ? ? ? ? ? 'location': cells[4].text.strip()
? ? ? ? }
? ? ? ? proxies.append(proxy)
? ??
? ? return proxies

proxy_list = get_proxy_list('https://www.kuaidaili.com/free/')
print(proxy_list)

第二步:测试代理IP的可用性

获取到代理IP列表之后,接下来需要测试这些代理IP的可用性。首先,我们需要编写一个函数来检测代理IP是否能够成功连接到目标网站。这个函数可以使用requests库来发送HTTP请求,并设置代理IP。

以下是一个测试代理IP可用性的示例代码:

import requests

def test_proxy(proxy):
? ? try:
? ? ? ? response = requests.get('https://www.example.com', proxies={'http': proxy['ip'] + ':' + proxy['port']}, timeout=5)
? ? ? ? if response.status_code == 200:
? ? ? ? ? ? return True
? ? except Exception as e:
? ? ? ? return False
? ??
? ? return False

proxy = {
? ? 'ip': '127.0.0.1',
? ? 'port': '8888',
? ? 'type': 'HTTP',
? ? 'location': 'Localhost'
}

print(test_proxy(proxy))

第三步:动态切换代理IP

在实际爬取过程中,我们可以通过循环遍历代理IP列表,并在每次请求时切换使用不同的代理IP。当检测到某个代理IP不可用时,可以自动切换到下一个可用的代理IP。

以下是一个动态切换代理IP的示例代码:

import requests
import random

def get_random_proxy(proxies):
? ? return random.choice(proxies)

def crawl(url, proxies):
? ? while True:
? ? ? ? proxy = get_random_proxy(proxies)
? ? ? ? if test_proxy(proxy):
? ? ? ? ? ? response = requests.get(url, proxies={'http': proxy['ip'] + ':' + proxy['port']})
? ? ? ? ? ? # 解析网页内容,并进行后续处理
? ? ? ? ? ? break

url = 'https://www.example.com'
proxies = [
? ? {'ip': '127.0.0.1', 'port': '8888', 'type': 'HTTP', 'location': 'Localhost'},
? ? {'ip': '123.45.67.89', 'port': '8080', 'type': 'HTTP', 'location': 'Somewhere'}
]

crawl(url, proxies)

以上代码会不断循环遍历代理IP列表,直到找到一个可用的代理IP为止。然后,使用这个代理IP发送HTTP请求,并解析返回的网页内容。

总结

有了动态切换代理IP的技巧,我们可以在进行爬虫开发时更好地应对目标网站的访问限制。通过获取代理IP列表、测试代理IP可用性和动态切换代理IP,我们可以提高爬取效率和匿名性。希望本文对你在Python爬虫开发中实现动态切换代理IP有所帮助!

文章来源:https://blog.csdn.net/wq10_12/article/details/135388442
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。