温馨提示×

如何在requests中实现多线程抓取

小樊
81
2024-12-11 07:28:15
栏目: 编程语言

在Python的requests库中,可以使用concurrent.futures模块中的ThreadPoolExecutor来实现多线程抓取。以下是一个简单的示例:

import requests
from concurrent.futures import ThreadPoolExecutor

def fetch(url):
    response = requests.get(url)
    if response.status_code == 200:
        return response.text
    else:
        return None

urls = [
    'https://www.example.com',
    'https://www.example2.com',
    'https://www.example3.com',
    # 更多URL...
]

# 使用线程池来执行抓取任务
with ThreadPoolExecutor(max_workers=5) as executor:
    results = list(executor.map(fetch, urls))

# 处理结果
for result in results:
    if result:
        print("成功获取到内容:", result[:100])  # 打印前100个字符
    else:
        print("获取失败或内容为空")

在这个示例中,我们首先定义了一个fetch函数,用于发送HTTP请求并返回响应内容。然后,我们创建了一个urls列表,其中包含要抓取的URL。接下来,我们使用ThreadPoolExecutor创建一个线程池,并设置最大工作线程数为5。最后,我们使用executor.map()方法将fetch函数应用到urls列表中的每个URL,并将结果存储在results列表中。最后,我们遍历results列表并处理每个结果。

0