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!