Narzędzia do pozyskiwania danych do pozyskiwania danych dotyczących nieruchomości za pomocą Pythona

Opublikowany: 2019-08-12
Spis treści pokaż
Po co indeksować dane z witryn z nieruchomościami?
Jak zeskrobać dane dotyczące nieruchomości za pomocą Pythona?
Gdzie jest Kodeks?
Kod Wyjaśnienie
Niektóre aukcje domów, które usunęliśmy
Pozyskiwanie danych dotyczących nieruchomości na dużą skalę

Wiodące witryny nieruchomościowe na świecie to skarbnica cennych danych. Baza danych dowolnej popularnej amerykańskiej witryny nieruchomości może zawierać informacje o ponad 100 milionach domów. Te domy obejmują te na sprzedaż, wynajem, a nawet te, których obecnie nie ma na rynku. Pozyskiwanie danych o nieruchomościach dostarcza również danych do czynszów i szacunków nieruchomości zwanych „Zestimates”. Pomaga zarówno właścicielom, jak i klientom lepiej planować, próbując oszacować ceny nieruchomości w nadchodzących latach.

Jeśli chodzi o kupno lub wynajem nieruchomości, wiemy, że pierwszą rzeczą, jaka przychodzi nam do głowy, jest porównanie cen. Te strony z ofertami mieszkaniowymi zapewniają porównanie cen ze wszystkimi ofertami w danym obszarze, a także podstawowe informacje, takie jak typ domu, liczba pokoi, wielkość, krótki opis itp.

Po co indeksować dane z witryn z nieruchomościami?

Duże firmy zajmujące się obrotem nieruchomościami kierują swoją ofertę na cały region i pracują nad milionami nieruchomości. Ale jeśli jesteś agentem nieruchomości, zamiast próbować samodzielnie zbierać dane ręcznie, możesz lepiej przeszukiwać dane z głównej witryny z ofertami nieruchomości.

Możesz także budować modele uczenia maszynowego, aby przewidywać ceny nieruchomości i porównywać swoje prognozy z Zestimates Zillow i sprawdzać, który z nich jest lepszy lub bliższy rzeczywistym wartościom.

Jak zeskrobać dane dotyczące nieruchomości za pomocą Pythona?

Jeśli śledziłeś którykolwiek z naszych poprzednich artykułów „Jak indeksować lub scape”, być może masz już przygotowaną niezbędną konfigurację na swoich komputerach. Jeśli nie, polecam śledzić ten artykuł, aby skonfigurować python do zgarniania danych, jego pakiety i edytor tekstu, zanim będziesz mógł pobrudzić sobie ręce kodem.

Gdzie jest Kodeks?

Bez ceregieli postanowiliśmy udostępnić Ci kod do zbierania danych o nieruchomościach za pomocą Pythona, który pomoże Ci wyodrębnić informacje ze strony internetowej z wykazem nieruchomości. Kod indeksowania danych jest napisany w Pythonie, a następnie pokażę ci, jak go uruchomić i co otrzymasz po jego uruchomieniu.

[język kodu=”python”]
#!/usr/bin/python
# -*- kodowanie: utf-8 -*-

importuj urllib.request
importuj urllib.parse
importuj urllib.error
z bs4 importuj BeautifulSoup
importuj ssl
importuj json
importuj ast
importuj system
z urllib.request import Żądanie, urlopen

# Do ignorowania błędów certyfikatu SSL

ctx = ssl.utwórz_domyślny_kontekst()
ctx.check_hostname = Fałsz
ctx.verify_mode = ssl.CERT_Brak

# Wejście od użytkownika

url = input('Wprowadź adres URL wykazu domów Zillow- ')

# Sprawienie, by strona uwierzyła, że ​​uzyskujesz do niej dostęp za pomocą przeglądarki Mozilla

req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})
strona internetowa = urlopen(req).read()

# Tworzenie obiektu BeautifulSoup strony html w celu łatwego wydobycia danych.

zupa = PięknaZupa(strona internetowa, 'html.parser')
html = zupa.prettify('utf-8')
property_json = {}
property_json['Details_Broad'] = {}
property_json['Adres'] = {}

# Wyodrębnij tytuł wykazu nieruchomości

dla tytułu w soup.findAll('title'):
property_json['Tytuł'] = title.text.strip()
przerwanie

dla meta w soup.findAll('meta', attrs={'name': 'description'}):
property_json['Detail_Short'] = meta['treść'].strip()

for div in soup.findAll('div', attrs={'class': 'character-count-truncated'}):
property_json['Details_Broad']['Opis'] = div.text.strip()

for (i, skrypt) in enumerate(soup.findAll('script',
attrs={'type': 'aplikacja/ld+json'})):
jeśli ja == 0:
json_data = json.loads(skrypt.tekst)
property_json['Details_Broad']['Liczba pokoi'] = json_data['numberOfRooms']
property_json['Details_Broad']['Rozmiar podłogi (w metrach kwadratowych)'] = json_data['floorSize']['value']
property_json['Adres']['Ulica'] = json_data['address']['ulica']
property_json['Address']['Locality'] = json_data['address']['addressLocality']
property_json['Address']['Region'] = json_data['address']['addressRegion']
property_json['Adres']['Kod pocztowy'] = json_data['address']['Kod pocztowy']
jeśli ja == 1:
json_data = json.loads(skrypt.tekst)
property_json['Cena w $'] = json_data['offers']['price']
property_json['Obraz'] = json_data['Obraz']
przerwanie

z open('data.json', 'w') jako plik zewnętrzny:
json.dump(property_json, outfile, wcięcie=4)

z open('output_file.html', 'wb') jako plik:
file.write(html)

print ('———-Rozpakowywanie danych zakończone. Sprawdź plik json.———-')
[/kod]

Aby uruchomić podany powyżej kod, należy go zapisać w pliku z rozszerzeniem, np. propertyScraper.py. Gdy to zrobisz, z terminala uruchom polecenie –

[język kodu=”python”]
python propertyScraper.py
[/kod]

Po uruchomieniu zostaniesz poproszony o podanie adresu URL wykazu nieruchomości. To jest strona internetowa, która będzie faktycznie indeksowana przez program w poszukiwaniu danych. Użyliśmy dwóch linków i zebraliśmy dane dwóch nieruchomości. Oto linki –

  1. https://www.zillow.com/homedetails/638-Grant-Ave-North-Baldwin-NY-11510/31220792_zpid/
  2. https://www.zillow.com/homedetails/10-orzech-St-Arlington-MA-02476/56401372_zpid/

Pliki JSON uzyskane po uruchomieniu kodu na podanym w późniejszym podtemacie.

Kod Wyjaśnienie

Zanim przejdziemy do tego, jak działa kod i co zwraca, ważne jest, aby zrozumieć sam kod. Jak zwykle najpierw trafiamy na podany adres URL i przechwytujemy cały kod HTML, który konwertujemy na piękny obiekt zupy. Po wykonaniu tej czynności wyodrębniamy określone elementy div, skrypty, tytuły i inne tagi o określonych atrybutach. W ten sposób jesteśmy w stanie wskazać konkretne informacje, które możemy chcieć wydobyć ze strony.

Widać, że wyodrębniliśmy również link do obrazu dla każdej właściwości. Zostało to zrobione celowo, ponieważ w przypadku nieruchomości, obrazy mają taką samą wartość, jak inne informacje. Chociaż rzeczywiście wyodrębniliśmy kilka pól ze stron z listami nieruchomości, należy zauważyć, że strona HTML zawiera znacznie więcej punktów danych. Dlatego zapisujemy również zawartość HTML lokalnie, aby można było przez nią przeglądać i indeksować więcej informacji.

Niektóre aukcje domów, które usunęliśmy

Jak wspomnieliśmy wcześniej, faktycznie zindeksowaliśmy kilka wykazów właściwości, aby pokazać, jak dane zeskrobane przez Python będą wyglądały w formacie JSON. Wspomnieliśmy również o właściwości, dla której jest określony JSON, pod JSON. Porozmawiajmy teraz o punktach danych, które zebraliśmy.

Otrzymaliśmy zdjęcie nieruchomości (chociaż wiele zdjęć dla każdej nieruchomości jest dostępnych na stronie oferty, dostaliśmy po jednym dla każdego - jest to górny obraz dla każdego ogłoszenia). Otrzymaliśmy również cenę (w dolarach), w jakiej jest ona wymieniona, tytuł nieruchomości i jej opis, który pomoże ci stworzyć mentalny obraz nieruchomości.

Wraz z tym zeskrobaliśmy adres, podzielony na cztery oddzielne części: ulica, miejscowość, region i kod pocztowy. Mamy inne pole szczegółów, które ma wiele podpól, takich jak liczba pokoi, wielkość piętra i długi opis. W niektórych przypadkach brakuje opisu, o czym dowiedzieliśmy się po zdrapaniu wielu stron.

[język kodu=”python”]
{
„Szczegóły_szerokie”: {
„Liczba pokoi”: 4,
„Rozmiar podłogi (w metrach kwadratowych)”: „1728”
},
"Adres zamieszkania": {
„Ulica”: „638 Grant Ave”,
„Miejscowość”: „North Baldwin”,
„Region”: „NY”,
„Kod pocztowy”: „11510”
},
„Tytuł”: „638 Grant Ave, North Baldwin, NY 11510 | MLS #3137924 | Zillow”,
„Detail_Short”: „638 Grant Ave , North Baldwin, NY 11510-1332 to dom jednorodzinny wystawiony na sprzedaż za 299 000 USD. Dom o powierzchni 1728 stóp kwadratowych ma 4 łóżka i 2 łazienki. Znajdź 31 zdjęć domu przy 638 Grant Ave na Zillow. Zobacz więcej szczegółów dotyczących nieruchomości, historii sprzedaży i danych Zestimate w Zillow. Numer MLS 3137924”,
„Cena w $”: 299000,
„Obraz”: „https://photos.zillowstatic.com/p_h/ISzz1p7wk4ktye1000000000.jpg”
}
[/kod]

[język kodu=”python”]
{
„Szczegóły_szerokie”: {
„Opis”: „Dom jednorodzinny z trzema mansardami położony w dzielnicy Brattle w Arlington, pomiędzy Arlington Heights i Arlington Center. Zbudowany w latach 20. XX wieku dom ten oferuje piękne detale z epoki, drewniane podłogi, belki stropowe, salon z kominkiem z prywatną werandą, formalną jadalnię, trzy duże sypialnie, biuro i dwie pełne łazienki. Potencjał ulepszenia tej nieruchomości w celu powiększenia przestrzeni życiowej i personalizacji według własnego gustu jest wyjątkowy. Blisko Minuteman Commuter Bikeway, linii autobusowych Rt 77 i 79, szkół, sklepów i restauracji. Wirtualne zdjęcia inscenizacji i wirtualnego remontu dostarczono, aby pomóc Ci w wizualizacji.”,
„Liczba pokoi”: 4,
„Rozmiar podłogi (w metrach kwadratowych)”: „2224”
},
"Adres zamieszkania": {
„Ulica”: „Ulica Orzechowa 10”,
„Miejscowość”: „Arlington”,
„Region”: „MA”,
„Kod pocztowy”: „02476”
},
„Tytuł”: „10 Walnut St, Arlington, MA 02476 | MLS #72515880 | Zillow”,
„Detail_Short”: „10 Walnut St , Arlington, MA 02476-6116 to dom jednorodzinny wystawiony na sprzedaż za 725 000 USD. Dom o powierzchni 2224 stóp kwadratowych to 4 łóżka, 2,0 łazienek. Znajdź 34 zdjęcia domu przy 10 Walnut St na Zillow. Zobacz więcej szczegółów dotyczących nieruchomości, historii sprzedaży i danych Zestimate w Zillow. Numer MLS 72515880”,
„Cena w $”: 725000,
„Obraz”: „https://photos.zillowstatic.com/p_h/ISifzwig3xt2re1000000000.jpg”
}
[/kod]

[język kodu=”python”]
{
„Szczegóły_szerokie”: {
„Liczba pokoi”: 4,
„Rozmiar podłogi (w metrach kwadratowych)”: „1728”
},
"Adres zamieszkania": {
„Ulica”: „638 Grant Ave”,
„Miejscowość”: „North Baldwin”,
„Region”: „NY”,
„Kod pocztowy”: „11510”
},
„Tytuł”: „638 Grant Ave, North Baldwin, NY 11510 | MLS #3137924 | Zillow”,
„Detail_Short”: „638 Grant Ave , North Baldwin, NY 11510-1332 to dom jednorodzinny wystawiony na sprzedaż za 299 000 USD. Dom o powierzchni 1728 stóp kwadratowych ma 4 łóżka i 2 łazienki. Znajdź 31 zdjęć domu przy 638 Grant Ave na Zillow. Zobacz więcej szczegółów dotyczących nieruchomości, historii sprzedaży i danych Zestimate w Zillow. Numer MLS 3137924”,
„Cena w $”: 299000,
„Obraz”: „https://photos.zillowstatic.com/p_h/ISzz1p7wk4ktye1000000000.jpg”
}
[/kod]

Pozyskiwanie danych dotyczących nieruchomości na dużą skalę

Używając takiego kodu, możesz indeksować tylko szczegóły dotyczące kilku konkretnych nieruchomości. Możesz od czasu do czasu ręcznie sprawdzać interesujące Cię nieruchomości. Jeśli jednak chcesz kierować reklamy na określony region w USA lub na arenie międzynarodowej, potrzebujesz profesjonalnego dostawcy usług internetowych lub narzędzi do zbierania danych, które pomogą Ci zebrać wykazy nieruchomości z wielu stron internetowych.

PromptCloud, jako wiodący dostawca web scrapingu, uważa, że ​​rozwiązania web scrapingu powinny być bezproblemowe i powinny składać się tylko z dwóch kroków – klient podaje wymagania i otrzymuje czyste dane.

Pamiętaj też, że tutaj na blogu użyliśmy zarówno robota, jak i skrobaka. Nie bądź zdezorientowany, oba są mniej więcej takie same, ale jeśli chcesz dowiedzieć się więcej, możesz sprawdzić naszego bloga na temat indeksowania danych internetowych vs scrapingu danych internetowych.


Zastrzeżenie: Kod obecny w naszym samouczku służy wyłącznie do celów edukacyjnych. Nie ponosimy odpowiedzialności za sposób, w jaki jest on używany i nie ponosimy żadnej odpowiedzialności z naszej strony za jakiekolwiek niekorzystne skutki kodu źródłowego. Sama obecność tego kodu w naszej witrynie nie oznacza, że ​​promujemy scraping lub indeksowanie witryn wymienionych w artykule. Jedynym celem tego samouczka jest zaprezentowanie techniki pisania skrobaków internetowych dla wiodących portali internetowych. Nie jesteśmy jednak zobowiązani do dostarczania żadnego wsparcia dla kodu; zachęcamy do dodawania pytań i opinii w sekcji komentarzy, abyśmy mogli sprawdzać i odpowiadać w określonych odstępach czasu .