注:此文章只用作技术讨论(请勿用作非法用途)

通常我们使用爬虫时,多次爬取或网站带有防爬虫等,本地ip就会得到禁封,为了实现避免 IP 封禁,我们需要使用代理服务器,并定期更换代理。下面是一个使用 Python 编写的爬虫示例:

import requests

from bs4 import BeautifulSoup

import random

import time

# 定义要爬取的网站的 URL

url = "https://www.baidu.com/"

# 定义代理服务器的 URL 列表

proxy_list = [

"http://xxx.xxxe.com",

"http://xxx2.xxxe.com",

"http://xxx3.xxxe.com"

]

# 设置请求头信息

headers = {

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"

}

# 定义请求失败的最大重试次数

max_retry = 5

# 定义每次请求之间的间隔时间

interval = 5

# 定义当前使用的代理服务器

current_proxy = None

# 定义当前的重试次数

current_retry = 0

# 循环发送请求直到成功或达到最大重试次数

while current_retry < max_retry:

try:

# 随机选择一个代理服务器

current_proxy = random.choice(proxy_list)

# 发送 HTTP 请求并获取 HTML 内容

response = requests.get(url, headers=headers, proxies={"http": current_proxy, "https": current_proxy})

# 如果请求成功,退出循环

if response.status_code == 200:

break

except Exception as e:

# 如果请求失败,记录日志并重试

print("请求失败:", e)

current_retry += 1

time.sleep(interval)

# 如果达到最大重试次数仍然失败,抛出异常

if current_retry == max_retry:

raise Exception("请求失败次数过多")

# 使用 BeautifulSoup 解析 HTML 内容

soup = BeautifulSoup(response.content, "html.parser")

# 获取网站标题

title = soup.title.string

# 获取所有链接

links = []

for link in soup.find_all("a"):

href = link.get("href")

if href:

links.append(href)

# 打印结果

print("网站标题:", title)

print("所有链接:", links)

我们定义了一个代理服务器的 URL 列表,并随机选择一个代理服务器来发送 HTTP 请求。如果请求失败,我们将重试指定的最大次数,并在每次请求之间等待一定的时间。这将有助于避免被封禁。如果达到最大重试次数仍然失败,将抛出异常。

请注意,代理服务器的选择和使用需要谨慎处理,以避免遭受其他类型的封禁和安全风险。使用代理服务器时,请遵守相关规定和网站的条款和条件。

推荐链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。