1
votes

Comment extraire les éléments de texte en utilisant Selenium en Python?

 entrez la description de l'image ici

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


0 commentaires

4 Réponses :


3
votes

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


0 commentaires

3
votes

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!


3 commentaires

@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?



2
votes

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.']

Sortie:

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)


2 commentaires

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



4
votes

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 >


2 commentaires

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!