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:
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.
3 Réponses :
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)
Si vous voulez des éléments de texte, vous pouvez utiliser:
soup.get_text()
Remarque: cela vous donnera tous les éléments de texte.
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
solution regex intéressante, je l'apprécie
Quelles valeurs obtenez-vous?