J'essaie d'extraire des données du site Web. https://roll20.net/compendium/dnd5e/Monsters%20List#content et j'ai quelques problèmes.
Mon premier script que j'ai essayé retournait une liste vide lors de la recherche par div et nom de classe, ce qui, je crois, est dû au fait que le site utilise Javascript ? Mais je ne suis pas certain que ce soit le cas ou pas.
Voici ma première tentative :
import requests
from bs4 import BeautifulSoup
import pandas as pd
page = requests.get('https://roll20.net/compendium/dnd5e/Monsters%20List#content')
soup = BeautifulSoup(page.text, 'html.parser')
card = soup.find_all("div", class_='card')
print(card)
Celui-ci renvoie une liste vide, alors je me suis fatigué à utiliser Selenium et à gratter avec cela. Voici ce script :
import requests
from bs4 import BeautifulSoup
import pandas as pd
from selenium import webdriver
url='https://roll20.net/compendium/dnd5e/Monsters%20List#content'
driver = webdriver.Firefox(executable_path = 'C:\Windows\System32\geckodriver')
driver.get(url)
page = driver.page_source
page_soup = soup(page,'html.parser')
En démarrant le script avec cela, j'ai ensuite essayé ces 3 différentes options (je les ai exécutées individuellement, je les ai juste listées ensemble ici pour des raisons de simplicité) :
for card in body.find('div', {"class":"card"}):
print(card.text)
print(card)
for card in body.find_all('div', {"class":"card"}):
print(card.text)
print(card)
card = body.find_all('div', {"class":"card"})
print(card)
Ils renvoient tous le même message d'erreur : AttributeError : L'objet ResultSet n'a pas d'attribut 'find'. Vous traitez probablement une liste d'éléments comme un seul élément. Avez-vous appelé find_all() alors que vous vouliez appeler find() ?
Où est-ce que je me trompe ici ?
Edita:
Fazul, merci pour votre contribution à ce sujet. Je suppose que je devrais être plus précis. Je cherchais plutôt à obtenir le contenu de chaque carte. Par exemple, la carte a une classe "body" et dans cette classe body il y a de nombreux champs qui sont les données que je cherche à extraire. Peut-être ai-je mal compris votre script et ce que vous avez déclaré. Voici une capture d'écran pour peut-être aider à préciser un peu plus ma question sur le contenu que je cherche à extraire.
Donc tout ce qui se trouverait sous le corps, c'est-à-dire le nom, le titre, le sous-titre, etc. Ce sont les textes que j'essayais d'extraire.