Python 示例:使用 random 模块设置随机延迟

281 阅读2分钟

在 Python 中,可以使用 random 模块生成随机延迟时间,并结合 time.sleep() 函数实现延迟效果。

示例代码:

Python复制

import requests
import time
import random

# 目标 URL 列表
urls = [
    "https://example.com/page1",
    "https://example.com/page2",
    "https://example.com/page3"
]

# 遍历 URL 列表并发送请求
for url in urls:
    # 发送 HTTP 请求
    response = requests.get(url)
    
    # 检查请求是否成功
    if response.status_code == 200:
        print(f"成功获取: {url}")
    else:
        print(f"获取失败: {url}")
    
    # 设置随机延迟时间(例如:1 到 3 秒之间)
    random_delay = random.uniform(1, 3)  # 生成 1 到 3 秒之间的随机浮点数
    print(f"随机延迟 {random_delay:.2f} 秒")
    time.sleep(random_delay)  # 暂停指定的时间

代码说明:

  1. random.uniform(a, b)

    • 生成一个在 [a, b) 范围内的随机浮点数。例如,random.uniform(1, 3) 会生成一个介于 1 到 3 秒之间的随机延迟时间。
  2. time.sleep(seconds)

    • 暂停程序执行指定的秒数。seconds 可以是整数或浮点数,例如 time.sleep(2.5) 会暂停 2.5 秒。
  3. 随机延迟的作用

    • 通过随机延迟,爬虫的请求时间间隔变得不规律,更接近人类的访问行为,从而降低被目标网站识别为爬虫的风险。

Java 示例:使用 Math.random() 设置随机延迟

在 Java 中,可以使用 Math.random() 方法生成随机数,并结合 Thread.sleep() 方法实现随机延迟。

示例代码:

java复制

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

public class RandomDelayCrawler {
    public static void main(String[] args) {
        // 目标 URL 列表
        List<String> urls = new ArrayList<>();
        urls.add("https://example.com/page1");
        urls.add("https://example.com/page2");
        urls.add("https://example.com/page3");

        // 遍历 URL 列表并发送请求
        for (String url : urls) {
            try {
                // 发送 HTTP 请求
                HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
                connection.setRequestMethod("GET");
                connection.connect();

                int responseCode = connection.getResponseCode();
                if (responseCode == 200) {
                    System.out.println("成功获取: " + url);
                } else {
                    System.out.println("获取失败: " + url);
                }

                // 设置随机延迟时间(例如:1 到 3 秒之间)
                double randomDelay = 1000 + Math.random() * 2000;  // 生成 1000 到 3000 毫秒之间的随机延迟
                System.out.println("随机延迟 " + randomDelay + " 毫秒");
                Thread.sleep((long) randomDelay);  // 暂停指定的时间

            } catch (IOException | InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

代码说明:

  1. Math.random()

    • 生成一个在 [0.0, 1.0) 范围内的随机浮点数。通过乘以一个系数(如 2000)并加上一个偏移量(如 1000),可以生成指定范围内的随机延迟时间。
  2. Thread.sleep(millis)

    • 暂停当前线程指定的毫秒数。millis 是一个长整型参数,表示暂停的时间(以毫秒为单位)。
  3. 随机延迟的作用

    • 通过随机延迟,爬虫的请求时间间隔变得不规律,更接近人类的访问行为,从而降低被目标网站识别为爬虫的风险。

总结

通过设置随机延迟,爬虫的请求时间间隔变得不规律,更接近人类的访问行为,从而显著降低被目标网站识别为爬虫的风险。无论是使用 Python 的 random.uniform()time.sleep(),还是 Java 的 Math.random()Thread.sleep(),都可以轻松实现随机延迟的效果。