J'utilise Selenium pour récupérer le contenu de l'App Store: https://apps.apple.com/us/app/bank-of-america-private-bank/id1096813830 p >
J'ai essayé d'extraire le champ de texte "En tant qu'experts en la matière, notre équipe est très engageante ..."
J'ai essayé de trouver des éléments par classe
review_ratings = driver.find_elements_by_class_name('we-truncate we-truncate--multi-line we-truncate--interactive ember-view we-customer-review__body') review_ratingsList = [] for e in review_ratings: review_ratingsList.append(e.get_attribute('innerHTML')) review_ratings
4 Réponses :
Vous pouvez utiliser WebDriverWait
pour attendre la visibilité de l'élément et obtenir du texte. Veuillez vérifier le bon localisateur de sélénium .
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC #... wait = WebDriverWait(driver, 5) review_ratings = wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, ".we-customer-review"))) for review_rating in review_ratings: starts = review_rating.find_element_by_css_selector(".we-star-rating").get_attribute("aria-label") title = review_rating.find_element_by_css_selector("h3").text review = review_rating.find_element_by_css_selector("p").text
Puis-je suggérer de mélanger du sélénium
avec BeautifulSoup
?
Utilisation du pilote Web:
Out[22]: 'As subject matter experts, our team is very engaging and focused on our near and long term financial health!'
Résultat:
from bs4 import BeautifulSoup from selenium import webdriver browser=webdriver.Chrome() url = "https://apps.apple.com/us/app/bank-of-america-private-bank/id1096813830" browser.get(url) innerHTML = browser.execute_script("return document.body.innerHTML") bs = BeautifulSoup(innerHTML, 'html.parser') bs.blockquote.p.text
S'il y a quelque chose à expliquer, dites-le-moi!
@Juan C que fait "" return document.body.innerHTML ""? Merci
AFAIK, il vous permet d'obtenir le code HTML d'une page Web HTML dynamique après le chargement de tout. Si vous essayez d'obtenir l'objet BeautifulSoup
à partir du lien brut, il n'aura pas les données des objets javascript qui doivent se charger, etc. (Je ne viens pas d'une formation en génie logiciel, donc ma langue peut être inexacte).
@ArthurMorgan si vous trouvez que c'est la meilleure réponse, pourriez-vous la marquer pour que votre question n'apparaisse pas dans la page des questions sans réponse?
Utilisez WebDriverWait
et attendez presence_of_all_elements_located
et utilisez le sélecteur Css suivant.
['As subject matter experts, our team is very engaging and focused on our near and long term financial health!', 'Very much seems to be an unfinished app. Canât find secure message alert. Or any alerts for that matter. Most of my client team is missing from the âsend toâ list. I have other functions very useful, when away from my computer.']
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get("https://apps.apple.com/us/app/bank-of-america-private-bank/id1096813830") review_ratings =WebDriverWait(driver,20).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,'.we-customer-review__body p[dir="ltr"]'))) review_ratingsList = [] for e in review_ratings: review_ratingsList.append(e.get_attribute('innerHTML')) print(review_ratingsList)
Puis-je demander ce que fait le ".we-customer-review__body"? @KunduK
C'est le nom de la classe. Pour le sélecteur css, le nom de la classe commence par .classname
Utilisation des requêtes
et BeautifulSoup
:
As subject matter experts, our team is very engaging and focused on our near and long term financial health!
Output:
import requests from bs4 import BeautifulSoup url = 'https://apps.apple.com/us/app/bank-of-america-private-bank/id1096813830' res = requests.get(url) soup = BeautifulSoup(res.text,'lxml') item = soup.select_one("blockquote > p").text print(item)
p >
J'aime cette réponse, car si vous avez une liste d'URL, j'imagine l'approche la plus rapide pour accéder aux pages spécifiques et les gratter. Si la navigation entre les pages est nécessaire, cela ne fonctionnera pas.
Heureux de savoir. Merci!