1
votes

Recherche du nom et des codes de tous les aéroports

J'essaie de récupérer des données pour obtenir le texte dont j'ai besoin. Je veux trouver la ligne qui dit aberdeen et toutes les lignes après elle qui contiennent les informations de l'aéroport. Voici une photo de la hiérarchie html:

 image

J'essaie de localiser les éléments de texte dans la classe" i1 "avec ce code:

import requests
from bs4 import BeautifulSoup

page = requests.get('http://www.airportcodes.org/')
soup = BeautifulSoup(page.text, 'html.parser')
table = soup.find('div',attrs={"class":"i1"})
print(table.text)

Mais je n'obtiens pas du tout les valeurs attendues. Voici un lien vers les données si curieux. Je suis évidemment nouveau dans le scraping.


1 commentaires

Quelles valeurs obtenez-vous?


3 Réponses :


2
votes

Le problème est votre parseur BeautifulSoup:

import requests
from bs4 import BeautifulSoup

page = requests.get('http://www.airportcodes.org/')
soup = BeautifulSoup(page.text, 'lxml')
table = soup.find('div',attrs={"class":"i1"})
print(table.text)


0 commentaires

0
votes

Si vous voulez des éléments de texte, vous pouvez utiliser:

soup.get_text()

Remarque: cela vous donnera tous les éléments de texte.


0 commentaires

0
votes

Pourquoi les gens suggèrent-ils le sélénium? cela ne charge pas dynamiquement les données ... Les requêtes + re sont tout ce dont vous avez besoin, vous n'avez même pas besoin d'une belle soupe

 data = requests.get('http://www.airportcodes.org/').content
 cities_and_codes =re.findall("([A-Za-z, ]+)\(([A-Z]{3})\)",data)

recherchez simplement les caractères alphanumériques (y compris également la virgule et l'espace) suivi d'exactement 3 lettres majuscules entre parenthèses


1 commentaires

solution regex intéressante, je l'apprécie