Commençons par importer les bibliothèques que nous avons installées précédemment :
from selenium import webdriver
from bs4 import BeautifulSoup
import pandas as pd
Pour extraire les données du site web, nous devons les charger en configurant le webdriver pour qu'il utilise le navigateur Chrome. Pour ce faire, il suffit de spécifier le chemin d'accès où se trouve le chromedriver. N'oubliez pas d'ajouter le nom de l'exécutable à la fin, et pas seulement son emplacement !
driver = webdriver.Chrome('your/path/here/chromedriver')
Outre le nombre de chambres et de salles de bains, nous pouvons également extraire l'adresse, le prix et, pourquoi pas, la superficie du bien immobilier. Plus nous disposons d'informations, plus il sera facile de choisir un nouveau logement.
Déclarez les variables et définissez l'URL du site web à scraper.
prices = []
beds = []
baths = []
sizes = []
addresses = []
driver.get('https://www.realtor.com/realestateandhomes-search/New-York_NY')
Nous devons extraire les données du site web, qui se trouvent dans les balises imbriquées comme expliqué précédemment. Recherchez les balises comportant les attributs mentionnés précédemment et stockez les données dans les variables déclarées ci-dessus. N'oubliez pas que nous voulons uniquement enregistrer les propriétés comportant au moins deux chambres et une salle de bain !
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')
Parfait ! Nous avons toutes les informations dont nous avons besoin, mais où les stocker ? C'est là que la bibliothèque pandas s'avère utile et nous aide à structurer les données dans un fichier CSV que nous pourrons utiliser ultérieurement.
df = pd.DataFrame({'Address': addresses, 'Price': prices, 'Beds': beds, 'Baths': baths, 'Sizes': sizes})
df.to_csv('listings.csv', index=False, encoding='utf-8')
Si nous exécutons le code, un fichier nommé « listings.csv » sera créé, et à l'intérieur, nos précieuses données !
Nous avons réussi ! Nous avons créé notre propre outil de web scraping ! Passons maintenant directement à la pratique et voyons quelles étapes nous devons suivre et quelles lignes de code nous devons modifier pour utiliser un outil de scraping.