温馨提示×

python requests爬虫并发处理怎样实现

小樊
82
2024-12-08 15:47:23
栏目: 编程语言

在Python中,要实现requests爬虫的并发处理,可以使用concurrent.futures模块中的ThreadPoolExecutorProcessPoolExecutor。这里给出一个使用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

请注意,这个示例仅用于演示目的。在实际应用中,你可能需要根据需求对代码进行调整,例如添加异常处理、限制并发数、使用代理等。

0