要编写一个异步爬虫,我们可以使用Python的aiohttp
库和asyncio
库。以下是一个简单的异步爬虫示例,用于抓取网站上的链接:
首先,确保安装了aiohttp
库:
pip install aiohttp
然后,创建一个名为async_crawler.py
的文件,并在其中编写以下代码:
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') links = [] for link in soup.find_all('a'): href = https://www.yisu.com/ask/link.get('href') if href and not href.startswith('#'): links.append(href) return links async def main(urls): async with aiohttp.ClientSession() as session: tasks = [fetch(url, session) for url in urls] htmls = await asyncio.gather(*tasks) for html in htmls: links = await parse(html) print(links) if __name__ == '__main__': urls = [ 'https://example.com', 'https://example.org', 'https://example.net' ] asyncio.run(main(urls))
在这个示例中,我们定义了三个异步函数:
fetch(url, session)
:使用aiohttp
库异步获取给定URL的HTML内容。parse(html)
:使用BeautifulSoup库解析HTML内容,并提取所有非锚点链接。main(urls)
:创建一个aiohttp.ClientSession
,为给定的URL列表创建一个任务列表,等待所有任务完成,然后对每个URL调用parse()
函数并打印结果。
要运行此示例,请在命令行中执行以下命令:
python async_crawler.py
请注意,这个示例仅用于抓取和解析链接,实际应用中可能需要根据需求进行更多的定制。