在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
列表并处理每个结果。