在Python中,实现爬虫并发处理通常使用多线程、多进程或异步编程。这里,我将向您展示如何使用asyncio
和aiohttp
库实现异步爬虫。
首先,确保您已经安装了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())
在这个示例中,我们首先导入所需的库,然后定义fetch
和parse
函数。fetch
函数使用aiohttp
库异步获取网页内容,而parse
函数使用BeautifulSoup解析HTML并打印标题。
在main
函数中,我们创建一个URL列表,然后使用aiohttp.ClientSession
创建一个异步HTTP客户端。接下来,我们为每个URL创建一个fetch
任务,并将其添加到任务列表中。使用asyncio.gather
并发执行所有任务,并在完成后收集结果。最后,我们将结果传递给parse
函数进行解析。
要运行此示例,请将urls
列表替换为您要爬取的网址,并确保目标网站允许爬虫访问。