Асинхронный анализ HTML с Beautifulsoup4 в Python - PullRequest
1 голос
/ 04 июля 2019

Я делаю скрипт сетевого скребка на python. Я должен сделать это с помощью Asyncio. Поэтому для асинхронного HTTP-запроса я использую AioHTTP.
Это нормально, но когда я пытаюсь создать неблокирующее приложение (ждите), beautifulsoup4 заблокирует приложение (потому что доза Beautifulsoup4 не поддерживает асинхронный режим)

Это то, что я попробовал.

import asyncio, aiohttp
from bs4 import BeautifulSoup

async def extractLinks(html):
    soup = BeautifulSoup(html, 'html.parser')
    return soup.select(".c-pro-box__title a")

async def getHtml(session, url):
    async with session.get(url) as response:
        return await response.text()

async def loadPage(url):
    async with aiohttp.ClientSession() as session:
        html = await getHtml(session, url)
        links = await extractLinks(html)
        return links

loop = asyncio.get_event_loop()
loop.run_until_complete(loadPage())

extractLinks() заблокирует выполнение программы.
Так возможно ли сделать его неблокирующим? Или есть какая-нибудь библиотека, кроме Beautifulsoup4, которая максимально поддерживает асинхронность?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...