Empecemos importando las bibliotecas que hemos instalado anteriormente:
from selenium import webdriver
from bs4 import BeautifulSoup
import pandas as pd
Para extraer los datos de la página web, tenemos que cargarlos configurando el webdriver para que utilice el navegador Chrome. Para ello, solo tenemos que especificar la ruta donde se encuentra el chromedriver. ¡No olvides añadir el nombre del ejecutable al final, no solo su ubicación!
driver = webdriver.Chrome('your/path/here/chromedriver')
Además del número de dormitorios y baños, también podemos extraer la dirección, el precio y, por qué no, el tamaño de la propiedad. Cuanta más información tengamos, más fácil será decidirnos por una nueva vivienda.
Declara las variables y establece la URL del sitio web del que se va a extraer la información.
prices = []
beds = []
baths = []
sizes = []
addresses = []
driver.get('https://www.realtor.com/realestateandhomes-search/New-York_NY')
Tenemos que extraer los datos de la página web, que se encuentran en las etiquetas anidadas, tal y como se ha explicado anteriormente. Busca las etiquetas con los atributos mencionados anteriormente y almacena los datos en las variables declaradas más arriba. Recuerda que solo queremos guardar propiedades con al menos dos dormitorios y un baño.
content = driver.page_source
soup = BeautifulSoup(content, features='html.parser')
for element in soup.findAll('li', attrs={'class': 'component_property-card'}):
price = element.find('span', attrs={'data-label': 'pc-price'})
bed = element.find('li', attrs={'data-label': 'pc-meta-beds'})
bath = element.find('li', attrs={'data-label': 'pc-meta-baths'})
size = element.find('li', attrs={'data-label': 'pc-meta-sqft'})
address = element.find('div', attrs={'data-label': 'pc-address'})
if bed and bath:
nr_beds = bed.find('span', attrs={'data-label': 'meta-value'})
nr_baths = bath.find('span', attrs={'data-label': 'meta-value'})
if nr_beds and float(nr_beds.text) >= 2 and nr_baths and float(nr_baths.text) >= 1:
beds.append(nr_beds.text)
baths.append(nr_baths.text)
if price and price.text:
prices.append(price.text)
else:
prices.append('No display data')
if size and size.text:
sizes.append(size.text)
else:
sizes.append('No display data')
if address and address.text:
addresses.append(address.text)
else:
addresses.append('No display data')
¡Genial! Tenemos toda la información que necesitamos, pero ¿dónde la guardamos? Aquí es donde la biblioteca pandas nos resulta útil y nos ayuda a estructurar los datos en un archivo CSV para que podamos utilizarlos en el futuro.
df = pd.DataFrame({'Address': addresses, 'Price': prices, 'Beds': beds, 'Baths': baths, 'Sizes': sizes})
df.to_csv('listings.csv', index=False, encoding='utf-8')
Si ejecutamos el código, se creará un archivo llamado «listings.csv», ¡y en él estarán nuestros valiosos datos!
¡Lo hemos conseguido! ¡Hemos creado nuestra propia herramienta de web scraping! Ahora vamos a ponernos manos a la obra y ver qué pasos debemos seguir y qué líneas de código tenemos que modificar para utilizar una herramienta de scraping.