温馨提示×

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

小樊
85
2024-12-12 05:15:44
栏目: 编程语言

在Python中,实现爬虫并发处理通常使用多线程、多进程或异步编程。这里,我将向您展示如何使用asyncioaiohttp库实现异步爬虫。

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

pip install aiohttp

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

import asyncio
import aiohttp
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', class_='title')
    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.ensure_future(fetch(url, session))
            tasks.append(task)

        htmls = await asyncio.gather(*tasks)

        for html in htmls:
            await parse(html)

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

在这个示例中,我们首先导入所需的库,然后定义fetchparse函数。fetch函数使用aiohttp库异步获取网页内容,而parse函数使用BeautifulSoup解析HTML并打印标题。

main函数中,我们创建一个URL列表,然后使用aiohttp.ClientSession创建一个异步HTTP客户端。接下来,我们为每个URL创建一个fetch任务,并将其添加到任务列表中。使用asyncio.gather并发执行所有任务,并在完成后收集结果。最后,我们将结果传递给parse函数进行解析。

要运行此示例,请将urls列表替换为您要爬取的网址,并确保目标网站允许爬虫访问。

0