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