Redfin скребок для получения Redfin оценки - PullRequest
0 голосов
/ 19 июня 2019

У меня есть несколько сообщений об этом, но я нашел новую проблему. Из link1 и link2 вы заметите, что в зависимости от того, находится ли дом на рынке или нет, страница будет по-разному отображать оценку Redfin. У меня есть способ получить оценку redfin по ссылке1, но не по ссылке2.

Это HTML-код от link2, где хранится оценка redfin, которую я пытаюсь получить:

enter image description here \

Я пытался следовать подходу, аналогичному тому, как я получаю данные link1, но мой код возвращает пустой список.

Вот мой код:

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/')


def get_redfin_estimate(address):
    search_box = driver.find_element_by_name('searchInputBox')
    search_box.send_keys(address)
    search_box.submit()
    time.sleep(3)
    soup = BeautifulSoup(driver.page_source, 'html.parser')
    data = soup.find_all(lambda tag: tag.name == 'div' and tag.get('class') == ['statsValue'])
    for element in data:
        if "$" in element.text:
            return(element.text)
        else:
            return "N/A"


# print(get_redfin_estimate('687 Catalina Laguna Beach, CA 92651'))

search_box = driver.find_element_by_name('searchInputBox')
search_box.send_keys('687 Catalina Laguna Beach, CA 92651')
search_box.submit()
time.sleep(3)
soup = BeautifulSoup(driver.page_source, 'html.parser')
data = soup.find_all(lambda tag: tag.name == 'span' and tag.get('class') == ['value'])
print(data)


driver.quit()

Если у кого-то есть предложения о том, как получить оценку redfin для link2, которая будет принята с благодарностью, или если у вас есть предложения о том, как получить оценку redfin для link1, дайте мне знать.

Ответы [ 2 ]

1 голос
/ 19 июня 2019

Чтобы получить Redfin Estimate по ссылке2, попробуйте следующий код.

from selenium import webdriver
from bs4 import BeautifulSoup
import time
driver=webdriver.Chrome()
driver.get("https://www.redfin.com/CA/Laguna-Beach/687-Catalina-St-92651/home/4889627")
time.sleep(3)
data=driver.page_source
soup=BeautifulSoup(data,'html.parser')
redfinestimate=soup.find('span',class_='avmLabel').find_next('span', class_='value').text
print(redfinestimate)

Чтобы получить данные по ссылке1, используйте следующий код.

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
from bs4 import BeautifulSoup
import time
driver=webdriver.Chrome()
driver.get("https://www.redfin.com/")
element=driver.find_element_by_id('search-box-input')
element.send_keys('687 Catalina Laguna Beach, CA 92651')
WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,"//button[@class='inline-block SearchButton clickable float-right']"))).click()
time.sleep(3)
data=driver.page_source
soup=BeautifulSoup(data,'html.parser')
redfinestimate=soup.find('span',class_='avmLabel').find_next('span', class_='value').text
print(redfinestimate)
1 голос
/ 19 июня 2019

Селектор .avm .statsValue для ссылки1 и [data-rf-test-id="avmLdpPrice"] .value для ссылки2, объедините их, используя запятую ,, чтобы выбрать существующую, и используйте в одном селекторе:

import re

soup = BeautifulSoup(driver.page_source, 'html.parser')
price = soup.select_one('.avm .statsValue, [data-rf-test-id="avmLdpPrice"] .value').text
price_numeric = re.sub("[^0-9]", "", price)
print(price)
print(price_numeric)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...