python爬虫(实现自动避免IP禁封)

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

通常我们使用爬虫时,多次爬取或网站带有防爬虫等,本地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 请求。如果请求失败,我们将重试指定的最大次数,并在每次请求之间等待一定的时间。这将有助于避免被封禁。如果达到最大重试次数仍然失败,将抛出异常。

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鹅子鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值