Une fois que j'ai trouvé l'élément souhaité, j'ai ceci:
from selenium import webdriver from selenium.webdriver.remote import webelement import pandas as pd import time from bs4 import BeautifulSoup driver = webdriver.Chrome('chromedriver.exe') driver.get('https://www.redfin.com/') search_box = driver.find_element_by_name('searchInputBox') search_box.send_keys('693 Bluebird Canyon Drive, Laguna Beach, CA 92651') search_box.submit() time.sleep(2) def get_address_url(address): url_list = [] search_box = driver.find_element_by_name('searchInputBox') search_box.send_keys('693 Bluebird Canyon Drive, Laguna Beach, CA 92651') search_box.submit() time.sleep(2) url_list.append(driver.current_url) # element = driver.find_elements_by_class_name('statsValue') # print(element[0].get_attribute('innerHTML')) soup = BeautifulSoup(driver.page_source, 'html.parser') data = soup.find_all(lambda tag: tag.name == 'div' and tag.get('class') == ['statsValue']) print(data) print(len(data)) print(type(data)) driver.quit()
Je voudrais simplement obtenir le nombre 1 615 422 $
. Comment puis-je faire cela? Je n'ai rien trouvé d'utile en ligne.
Voici mon code:
[<div class="statsValue">$1,615,422</div>, <div class="statsValue">1</div>, <div class="statsValue">2</div>]
3 Réponses :
Vous voulez l'attribut text
.
data = soup.find_all(lambda tag: tag.name == 'div' and tag.get('class') == ['statsValue']) for element in data: print (element.text)
Savez-vous pourquoi sqft n'est pas capturé alors que c'est aussi une statsValue?
Y a-t-il une autre classe en plus de statsValue? Votre fonction lambda trouve les div avec une seule classe.
Non me semble être pareil.
Vous pouvez utiliser regex et sub
pour supprimer les chiffres non:
soup = BeautifulSoup(driver.page_source, 'html.parser') stats = soup.select(".statsValue") for s in stats: print(s.text)
Résultat:
1615422
import re price = re.sub("[^0-9]", "", "$1,615,422") print(price)
Si vous voulez seulement obtenir le nombre 1 615 422 $
, je pense que les requêtes
sont suffisantes.
J'espère que ce code vous aidera
import requests from bs4 import BeautifulSoup as Soup url = 'https://www.redfin.com/CA/Laguna-Beach/693-Bluebird-Canyon-Dr-92651/home/4894466' headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36' } r = requests.get(url, headers=headers) soup = Soup(r.text, 'html5lib') data = soup.find('div', {'class', 'avm'}).div.text print(data) # $1,615,422