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