在 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) # 暂停指定的时间
代码说明:
-
random.uniform(a, b):- 生成一个在
[a, b)范围内的随机浮点数。例如,random.uniform(1, 3)会生成一个介于 1 到 3 秒之间的随机延迟时间。
- 生成一个在
-
time.sleep(seconds):- 暂停程序执行指定的秒数。
seconds可以是整数或浮点数,例如time.sleep(2.5)会暂停 2.5 秒。
- 暂停程序执行指定的秒数。
-
随机延迟的作用:
- 通过随机延迟,爬虫的请求时间间隔变得不规律,更接近人类的访问行为,从而降低被目标网站识别为爬虫的风险。
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();
}
}
}
}
代码说明:
-
Math.random():- 生成一个在
[0.0, 1.0)范围内的随机浮点数。通过乘以一个系数(如2000)并加上一个偏移量(如1000),可以生成指定范围内的随机延迟时间。
- 生成一个在
-
Thread.sleep(millis):- 暂停当前线程指定的毫秒数。
millis是一个长整型参数,表示暂停的时间(以毫秒为单位)。
- 暂停当前线程指定的毫秒数。
-
随机延迟的作用:
- 通过随机延迟,爬虫的请求时间间隔变得不规律,更接近人类的访问行为,从而降低被目标网站识别为爬虫的风险。
总结
通过设置随机延迟,爬虫的请求时间间隔变得不规律,更接近人类的访问行为,从而显著降低被目标网站识别为爬虫的风险。无论是使用 Python 的 random.uniform() 和 time.sleep(),还是 Java 的 Math.random() 和 Thread.sleep(),都可以轻松实现随机延迟的效果。