Python >> Tutoriel Python >  >> Python

Construisez un grattoir Web super rapide avec Python x100 que BeautifulSoup

Le scraper Web est une technique d'extraction d'informations structurées d'une page Web. Avec Python, vous pouvez créer un grattoir Web efficace en utilisant BeautifulSoup , requests et autres bibliothèques. Cependant, ces solutions ne sont pas assez rapides. Dans cet article, je vais vous montrer quelques conseils pour créer un gratteur Web ultra rapide avec Python.

N'utilisez pas BeautifulSoup4#

BeautifulSoup4 est convivial et convivial, mais il n'est pas rapide. Même vous utilisez un extracteur externe tel que lxml pour l'analyse HTML ou utilisez cchardet pour détecter l'encodage, il est encore lent.

Utilisez selectolax au lieu de BeautifulSoup4 pour l'analyse HTML#

selectolax est une liaison Python aux moteurs Modest et Lexbor.

Pour installer selectolax avec pip :

pip install selectolax

L'utilisation de selectolax est similaire à BeautifulSoup4 .

from selectolax.parser import HTMLParser

html = """
<body>
    <h1 class='>Welcome to selectolax tutorial</h1>
    <div id="text">
        <p class='p3'>Lorem ipsum</p>
        <p class='p3'>Lorem ipsum 2</p>
    </div>
    <div>
        <p id='stext'>Lorem ipsum dolor sit amet, ea quo modus meliore platonem.</p>
    </div>
</body>
"""
# Select all elements with class 'p3'
parser = HTMLParser(html)
parser.select('p.p3')

# Select first match
parser.css_first('p.p3')

# Iterate over all nodes on the current level
for node in parser.css('div'):
    for cnode in node.iter():
        print(cnode.tag, cnode.html)

Utilisez httpx au lieu de demandes#

Python requests est un client HTTP pour les humains. Il est facile à utiliser, mais il n'est pas rapide. Il ne prend en charge que les requêtes synchrones.

httpx est un client HTTP complet pour Python 3, qui fournit des API de synchronisation et asynchrones, et prend en charge HTTP/1.1 et HTTP/2.Il offre une API synchrone standard par défaut, mais vous donne également l'option d'un client asynchrone si vous besoin.Pour installer httpx avec pip :

pip install httpx

httpx propose la même API avec requests :

import httpx
async def main():
    async with httpx.AsyncClient() as client:
        response = await client.get('https://httpbin.org/get')
        print(response.status_code)
        print(response.json())

import asyncio
asyncio.run(main())

Pour des exemples et des utilisations, veuillez visiter la page d'accueil httpx

Utiliser des fichiers aio pour le fichier IO#

aiofiles est une bibliothèque Python pour les E/S de fichiers basées sur asyncio. Il fournit une API de haut niveau pour travailler avec des fichiers. Pour installer aiofiles avec pip :

pip install aiofiles

Utilisation de base :

import aiofiles
async def main():
    async with aiofiles.open('test.txt', 'w') as f:
        await f.write('Hello world!')

    async with aiofiles.open('test.txt', 'r') as f:
        print(await f.read())

import asyncio
asyncio.run(main())