温馨提示×

python异步爬虫并发控制

小樊
81
2024-12-07 11:23:38
栏目: 编程语言

在Python中,我们可以使用asyncio库来实现异步爬虫并发控制

首先,确保已经安装了aiohttp库,如果没有安装,可以使用以下命令安装:

pip install aiohttp

接下来,我们创建一个简单的异步爬虫:

import aiohttp
import asyncio
from bs4 import BeautifulSoup

async def fetch(url, session):
    async with session.get(url) as response:
        return await response.text()

async def parse(html):
    soup = BeautifulSoup(html, 'html.parser')
    titles = soup.find_all('h2')
    for title in titles:
        print(title.get_text())

async def main():
    urls = [
        'https://example.com/page1',
        'https://example.com/page2',
        'https://example.com/page3',
        # ... 更多URL
    ]

    async with aiohttp.ClientSession() as session:
        tasks = []
        for url in urls:
            task = asyncio.create_task(fetch(url, session))
            tasks.append(task)

        htmls = await asyncio.gather(*tasks)

        for html in htmls:
            await parse(html)

if __name__ == '__main__':
    asyncio.run(main())

在这个示例中,我们首先定义了fetch函数,它使用aiohttp库异步地获取给定URL的HTML内容。然后,我们定义了parse函数,它使用BeautifulSoup库解析HTML并打印所有<h2>标签的文本内容。

main函数中,我们创建了一个aiohttp.ClientSession实例,并为每个URL创建了一个fetch任务。然后,我们使用asyncio.gather并发地执行这些任务,并在所有任务完成后,使用parse函数解析获取到的HTML内容。

注意,这个示例仅用于演示目的,实际应用中可能需要根据目标网站的结构和需求进行调整。同时,为了避免对目标网站造成过大压力,建议在爬虫中加入适当的延迟和并发控制。

0