在Python中,要实现requests爬虫的并发处理,可以使用concurrent.futures
模块中的ThreadPoolExecutor
或ProcessPoolExecutor
。这里给出一个使用ThreadPoolExecutor
实现的简单示例:
首先,确保已经安装了requests库,如果没有安装,可以通过以下命令安装:
pip install requests
然后,创建一个名为concurrent_requests.py
的文件,并添加以下代码:
import requests
from concurrent.futures import ThreadPoolExecutor
# 定义一个函数,用于发送请求并获取响应内容
def fetch(url):
try:
response = requests.get(url)
response.raise_for_status() # 如果请求失败,抛出异常
return response.text
except requests.RequestException as e:
print(f"Error fetching {url}: {e}")
return None
# 定义一个函数,用于处理多个URL
def fetch_urls(urls, max_workers=5):
# 使用线程池来并发处理URL
with ThreadPoolExecutor(max_workers=max_workers) as executor:
# 使用executor.map()方法将URL列表映射到fetch()函数
responses = executor.map(fetch, urls)
# 打印响应内容
for url, response in zip(urls, responses):
if response:
print(f"URL: {url}\nResponse length: {len(response)}\n")
else:
print(f"URL: {url}\nNo response\n")
if __name__ == "__main__":
urls = [
"https://www.example.com",
"https://www.google.com",
"https://www.github.com",
# 添加更多URL
]
fetch_urls(urls)
在这个示例中,我们定义了一个fetch()
函数,用于发送请求并获取响应内容。我们还定义了一个fetch_urls()
函数,它接受一个URL列表和一个最大工作线程数(默认为5)。这个函数使用ThreadPoolExecutor
来并发处理URL,并将结果存储在一个响应列表中。最后,我们遍历响应列表并打印每个URL的响应内容。
要运行这个示例,只需在命令行中输入以下命令:
python concurrent_requests.py
请注意,这个示例仅用于演示目的。在实际应用中,你可能需要根据需求对代码进行调整,例如添加异常处理、限制并发数、使用代理等。