Vamos começar por importar as bibliotecas que instalámos anteriormente:
from selenium import webdriver
from bs4 import BeautifulSoup
import pandas as pd
Para extrair os dados do site, temos de carregá-los configurando o webdriver para utilizar o navegador Chrome. Para isso, basta especificar o caminho onde o chromedriver se encontra. Não se esqueça de adicionar o nome do executável no final — não apenas a sua localização!
driver = webdriver.Chrome('your/path/here/chromedriver')
Além do número de quartos e casas de banho, também podemos extrair a morada, o preço e, porque não, a área do imóvel. Quanto mais informações tivermos, mais fácil será decidir sobre uma nova casa.
Declare as variáveis e defina o URL do site a ser rastreado.
prices = []
beds = []
baths = []
sizes = []
addresses = []
driver.get('https://www.realtor.com/realestateandhomes-search/New-York_NY')
Precisamos de extrair os dados do site, que se encontram nas tags aninhadas, tal como explicado anteriormente. Encontre as tags com os atributos mencionados anteriormente e guarde os dados nas variáveis declaradas acima. Lembre-se de que só queremos guardar imóveis com, pelo menos, dois quartos e uma casa de banho!
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')
Ótimo! Temos toda a informação de que precisamos, mas onde devemos armazená-la? É aqui que a biblioteca pandas se torna útil e ajuda a estruturar os dados num ficheiro CSV para usarmos no futuro.
df = pd.DataFrame({'Address': addresses, 'Price': prices, 'Beds': beds, 'Baths': baths, 'Sizes': sizes})
df.to_csv('listings.csv', index=False, encoding='utf-8')
Se executarmos o código, será criado um ficheiro chamado «listings.csv» e, nele, os nossos preciosos dados!
Conseguimos! Criámos a nossa própria ferramenta de web scraping! Agora vamos direto ao assunto e ver quais os passos que precisamos de seguir e quais as linhas de código que precisamos de modificar para utilizar uma ferramenta de scraping.