溫馨提示×

python協程爬蟲怎么編寫

小樊
104
2024-12-07 18:44:49
欄目: 編程語言

要編寫一個使用協程的Python爬蟲,你可以使用aiohttp庫來處理異步HTTP請求,以及asyncio庫來管理協程。以下是一個簡單的示例,展示了如何使用這些庫來編寫一個異步爬蟲:

首先,確保安裝了aiohttp庫:

pip install aiohttp

然后,創建一個名為async_crawler.py的文件,并添加以下代碼:

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')
    for link in soup.find_all('a'):
        href = link.get('href')
        print(href)

async def main():
    urls = [
        'https://example.com',
        'https://example.org',
        'https://example.net',
    ]

    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())

在這個示例中,我們定義了三個異步函數:

  1. fetch(url, session):使用aiohttp庫異步獲取指定URL的HTML內容。
  2. parse(html):使用BeautifulSoup庫解析HTML內容,并打印所有鏈接的URL。
  3. main():創建一個aiohttp.ClientSession,并為每個URL創建一個fetch任務。然后,使用asyncio.gather并發執行這些任務,并在完成后遍歷結果并調用parse函數。

要運行此爬蟲,請在命令行中執行以下命令:

python async_crawler.py

請注意,這個示例僅用于演示目的,實際應用中可能需要處理更復雜的情況,例如限制并發請求數、處理相對URL、設置請求頭等。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女