在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
列表替换为您要爬取的网址,并确保目标网站允许爬虫访问。