Je veux gratter les données des sites Web en utilisant Beautiful Soup et les demandes, et je suis arrivé si loin que j'ai les données que je veux, mais maintenant je veux les filtrer:

from bs4 import BeautifulSoup
import requests
url = "website.com"
keyword = "22222"
r = requests.get(url)
data = r.text
soup = BeautifulSoup(data, 'lxml')

for article in soup.find_all('a'):
    for a in article:
        if article.has_attr('data-variant-code'):
            print(article.get("data-variant-code"))

Disons que cela imprime ce qui suit: 11111 22222 33333

Comment puis-je filtrer cela pour qu'il ne me renvoie que le "22222"?

1
Viet NaM 18 mars 2019 à 01:50

2 réponses

Meilleure réponse

En supposant que article.get("data-variant-code") imprime 11111, 22222, 33333, vous pouvez simplement utiliser une instruction if:

for article in soup.find_all('a'):
    for a in article:
        if article.has_attr('data-variant-code'):
           x = article.get("data-variant-code")
           if x == '22222':
               print(x)
0
Elrond Supports Monica 17 mars 2019 à 22:57

Si vous souhaitez imprimer le 2e groupe de caractères dans une chaîne délimitée par un espace, vous pouvez diviser la chaîne en utilisant l'espace comme délimiteur. Cela vous donnera une liste de chaînes puis accédera au 2e élément de la liste.

Par exemple:

print(article.get("data-variant-code").split(" ")[1])

result:  22222
0
âńōŋŷXmoůŜ 17 mars 2019 à 22:57