Scrapáil Sonraí Liostála Airbnb le Python

Tuairimí: 0

Tá sé ríthábhachtach rochtain a fháil ar shonraí AirBNB chun anailís a dhéanamh ar an margadh eastát réadach, taighde a dhéanamh ar dhinimic phraghsanna cíosa, anailís iomaíoch a dhéanamh, agus measúnú a dhéanamh ar athbhreithnithe agus ar rátálacha. Is féidir é seo a chur i gcrích trí shonraí gréasáin a scríobadh. Mar sin féin, is féidir le rochtain a fháil ar na sonraí seo a bheith dúshlánach toisc go bhféadfadh scríobadh téarmaí úsáide an tsuímh a shárú.

Ansin, déanfaimid iniúchadh ar threoir céim ar chéim maidir le conas scraper gréasáin a fhorbairt chun sonraí a bhaint as liostaí Airbnb ag baint úsáide as Python agus seiléiniam. Clúdóidh an treoir seo freisin conas bloic agus srianta féideartha a fhorchuireann an t -ardán a sheachaint.

Tuiscint a fháil ar ailtireacht láithreán gréasáin Airbnb

Is é an chéad chéim chun scraper gréasáin a chruthú ná tuiscint a fháil ar an dóigh le rochtain a fháil ar na leathanaigh ghréasáin a bhfuil suim agat iontu, ós rud é gur féidir le struchtúr na láithreán gréasáin athrú go minic. Chun tú féin a chur ar an eolas faoi struchtúr an tsuímh, is féidir leat uirlisí forbróra an bhrabhsálaí a úsáid chun HTML an leathanaigh ghréasáin a iniúchadh.

Chun rochtain a fháil ar uirlisí forbróra, cliceáil ar dheis ar an leathanach gréasáin agus roghnaigh “Iniúchadh” nó bain úsáid as an aicearra:

  • CTRL+SHIFT+I for Windows;
  • Option + ⌘ + I AR MAC.

Tá gach coimeádán liostála fillte i ngné div leis an tréith seo a leanas: class = "g1qv1ctd".

1.png

Trí chliceáil ar "Suíomh" agus "London, UK" a chlóscríobh is féidir linn rochtain a fháil ar an suíomh a thairgtear i Londain. Molann an láithreán gréasáin dátaí seiceála agus seiceála a chur leis. Ligeann sé dóibh praghas na seomraí a ríomh.

2.png

Bhreathnódh an URL don leathanach seo rud éigin mar seo:

url = "https://www.airbnb.com/s/London--United-Kingdom/homes?tab_id=home_tab&refinement_paths%5B%5D=%2Fhomes&flexible_trip_lengths%5B%5D=one_week&monthly_start_date=2024-01-01&monthly_length=3&price_filter_input_type=0&channel=EXPLORE&query=London%2C%20United%20Kingdom&place_id=ChIJdd4hrwug2EcRmSrV3Vo6llI&date_picker_type=calendar&source=structured_search_input_header&search_type=autocomplete_click"

Ón leathanach cuardaigh, déanfaimid na tréithe seo a leanas de na sonraí liostála táirge a scríobadh:

  • URL Liostála;
  • Ceart;
  • Saghas;
  • É féin;
  • Praghas a fháil amach;
  • Faisnéis Liostála Breise (gan aon leapacha agus dátaí atá ar fáil).

3.png

Treoir Céim ar Chéim maidir le Clár Scrapála Airbnb a Thógáil

Chun tús a chur le scríobadh gréasáin le haghaidh sonraí AirBNB, ní mór duit do thimpeallacht forbartha a bhunú ar dtús. Seo na céimeanna chun é sin a dhéanamh:

Céim 1: Timpeallacht fhíorúil a chruthú

Tugann timpeallachtaí fíorúla deis duit pacáistí Python a leithlisiú agus a spleáchais do thionscadail éagsúla. Cuidíonn sé seo le coinbhleachtaí a chosc agus cinntíonn sé go bhfuil na spleáchais cheart suiteáilte ag gach tionscadal.

Timpeallacht fhíorúil a chruthú ar Windows

Oscail ordú pras le pribhléidí riarthóra agus rith an t -ordú seo a leanas chun timpeallacht fhíorúil nua darb ainm “Venv” a chruthú:

python -m venv venv

An timpeallacht fhíorúil a ghníomhachtú:

venv\Scripts\activate

Timpeallacht fhíorúil a chruthú ar MacOS/Linux

Oscail críochfort agus rith an t -ordú seo a leanas chun timpeallacht fhíorúil nua darb ainm “Venv” a chruthú:

sudo python3 -m venv venv

An timpeallacht fhíorúil a ghníomhachtú:

source venv/bin/activate

Chun an timpeallacht fhíorúil a dhíghníomhachtú, ní gá ach an t -ordú seo a leanas a rith:

deactivate

Céim 2: Na leabharlanna riachtanacha a shuiteáil

Anois go bhfuil timpeallacht fhíorúil curtha ar bun agat, is féidir leat na leabharlanna riachtanacha a shuiteáil.

Na leabharlanna a thuiscint:

  • Seiléiniam: Ceadaíonn an uirlis scríobtha gréasáin cumhachtach seo duit brabhsálaí gréasáin a rialú go clárúil. Ligeann sé seo duit idirghníomhú le leathanaigh ghréasáin, lena n -áirítear cnaipí cliceáil, foirmeacha a líonadh, agus nascleanúint a dhéanamh trí leathanaigh amhail is dá mba rud é gur fíor -úsáideoir thú.
  • Seleniumwire: Leathnaíonn an leabharlann seo seiléiniam trí ligean duit idirghabháil agus iniúchadh a dhéanamh ar iarratais HTTP agus seachfhreastalaithe a chomhtháthú le do chuid oibríochtaí scríobtha. Tá sé seo an -tábhachtach mar nach bhfuil tacaíocht seachfhreastalaí dúchais ag seiléiniam.
  • BeautifulSoup4: Is leabharlann í seo atá deartha chun comhaid HTML agus XML a pharsáil. Cabhraíonn sé leat faisnéis shonrach a bhaint as leathanaigh ghréasáin ar bhealach struchtúrtha agus éifeachtach.
  • LXML: Parser HTML agus XML tapa agus láidir a chomhlánaíonn Beautifulsoup.

Laistigh de do thimpeallacht fhíorúil ghníomhachtaithe, rith an t -ordú seo a leanas chun na leabharlanna riachtanacha a shuiteáil:

pip install selenium beautifulsoup4 lxml seleniumwire

Tiománaithe Seiléiniam

Éilíonn seiléiniam ar thiománaí comhéadan a dhéanamh leis an mbrabhsálaí roghnaithe. Bainfimid úsáid as Chrome don treoir seo. Mar sin féin, cinntigh go bhfuil an WebDriver cuí suiteáilte agat don bhrabhsálaí de do rogha féin.

Nuair a íoslódálfar é, déan cinnte go gcuirtear an tiománaí in eolaire atá inrochtana ag athróg timpeallachta cosáin do chórais. Cuirfidh sé seo ar chumas seiléiniam an tiománaí a aimsiú agus an brabhsálaí a rialú.

Céim 3: Leabharlanna Iompórtála

Ag tús do chomhaid Python, iompórtáil na leabharlanna Seleniumwire agus Beautifulsoup. Seo mar a dhéanann tú é:

from seleniumwire import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import time
import csv
import random

Déanfaimid na leabharlanna `randamacha,` am ', agus `csv` a allmhairiú le haghaidh fóntais éagsúla.

Céim 4: comhtháthú seachfhreastalaí

Ansin, sainmhínímid liosta de na seachvótálaithe chun nach gcuirfidh Airbnb bac orthu. Nuair a bhíonn tú ag iarraidh iarratas a sheoladh gan seachfhreastalaí préimhe, d'fhéadfá teacht ar fhreagra "rochtain a dhiúltaítear".

4.png

Is féidir leat seachvótálaí a bhunú mar seo a leanas:

# List of proxies
proxies = [
     "username:password@Your_proxy_IP_Address:Your_proxy_port1",
     "username:password@Your_proxy_IP_Address:Your_proxy_port2",
     "username:password@Your_proxy_IP_Address:Your_proxy_port3",
     "username:password@Your_proxy_IP_Address:Your_proxy_port4",
     "username:password@Your_proxy_IP_Address:Your_proxy_port5",

]

Cinntigh go gcuirfidh tú an seachfhreastalaí iarbhír a fuair tú ó sheach-dhíoltóir in ionad "your_proxy_ip_address" agus "your_proxy_port" agus cuir do dhintiúir iarbhír in ionad na luachanna “ainm úsáideora” agus “pasfhocal”.

Céim 5: Proxies rothlacha

Is gné ríthábhachtach de scríobadh gréasáin é seachvótálaithe rothlacha. Is minic a chuireann suíomhanna gréasáin cosc ​​ar rochtain ar róbónna agus ar scríobairí nuair a fhaigheann siad iliarrataí ón seoladh IP céanna. Trí rothlú trí sheoltaí seachfhreastalaí éagsúla, is féidir leat a bhrath a sheachaint, le feiceáil mar ilúsáideoirí orgánacha, agus an chuid is mó de na bearta frith-scrapála a chuirtear i bhfeidhm ar an Láithreán Gréasáin a sheachbhóthar.

Chun rothlú seachfhreastalaí a chur ar bun, allmhairiú an leabharlann “randamach”. Sainmhínímid freisin feidhm `get_proxy ()` chun seachfhreastalaí a roghnú ónár liosta. Roghnaíonn an fheidhm seo seachvótálaí go randamach ón liosta seachvótálaithe ag baint úsáide as an modh random.choice () agus cuireann sé an seachvótálaí roghnaithe ar ais.

def get_proxy():
    return random.choice(proxies)

Céim 6: Socraigh Webdriver

Ansin, sainmhínímid an phríomhfheidhm ar a dtugtar `liostaí ()`. Is é seo an áit a gcuirfimid ár “chromedriver” ar bun. Baineann an fheidhm seo úsáid as seiléiniam chun nascleanúint a dhéanamh ar an leathanach liostaí maoine, fanann sé ar an leathanach a luchtú, agus cuireann sé an HTML i bponc ag baint úsáide as anraith álainn.

def listings(url):

    proxy = get_proxy()
    proxy_options = {
        "proxy": {
            "http": f"http://{proxy}",
            "https": f"http://{proxy}",
            "no_proxy": "localhost,127.0.0.1",
        }
    }

    chrome_options = Options()
    chrome_options.add_argument("--headless")
  

    s = Service(
        "C:/Path_To_Your_WebDriver"
    ) # Cuir do chosán in ionad do chromedriver
    driver = webdriver.Chrome(
        service=s, seleniumwire_options=proxy_options, chrome_options=chrome_options
    )

    driver.get(url)

    time.sleep(8) # Coigeartú bunaithe ar am ualach an tsuímh ghréasáin

    soup = BeautifulSoup(driver.page_source, "lxml")

    driver.quit()

Anseo, tosaímid trí sheachvótálaí randamach a roghnú agus na roghanna seachfhreastalaí a bhunú. Bainfear úsáid as na roghanna seo chun an Webdriver a chumrú chun an seachfhreastalaí a úsáid. Ansin, bhunaíomar na roghanna Chrome. Cuir an argóint gan chontúirt leis an mbrabhsálaí a rith i mód gan dídean, rud a chiallaíonn go rithfidh an brabhsálaí sa chúlra gan comhéadan grafach úsáideora.

Ansin cuir tús leis an Webdriver leis an tseirbhís, Roghanna Seleniumwire, agus Chrome Options. Úsáidtear an Webdriver ansin chun nascleanúint a dhéanamh chuig an URL a thugtar. Cuirimid am codlata de 8 soicind leis chun ligean don leathanach luchtú go hiomlán, agus ansin an HTML a cuireadh ar ais a pharsáil ag baint úsáide as anraith álainn. Tar éis an pharsáil a dhéanamh, dúnann sé an Webdriver.

Céim 7: Na sonraí liostála a aimsiú agus a bhaint amach

Nuair a bheidh an t -ábhar HTML faighte agat go rathúil, is é an chéad chéim eile sonraí ábhartha a bhaint as gach liostáil. Ag baint úsáide as BeautifulSoup, is féidir linn nascleanúint a dhéanamh go héasca tríd an struchtúr HTML agus na heilimintí ina bhfuil an fhaisnéis liostála a aimsiú.

Eilimintí Liostaithe a Bhaint Amach

Ar an gcéad dul síos, aithnímid na heilimintí liostála go léir ar an leathanach. Cuimsíonn na heilimintí seo na sonraí a bhfuil suim againn iontu, mar shampla an URL liostála, an teideal, an tuairisc, an rátáil, an praghas, agus an fhaisnéis bhreise.

listing_elements = soup.find_all("div", class_="g1qv1ctd")
for listing_element in listing_elements:

Úsáideann an cód seo modh find_all() BeautifulSoup chun gach eilimint div leis an rang “g1qv1ctd” a aimsiú. Seasann na heilimintí seo do liostaí aonair ar leathanach Airbnb. Ansin déanann sé lúbadh tríd gach ceann de na heilimintí liostála seo chun na sonraí ábhartha a bhaint.

Url liostála a bhaint amach

I gcás gach eilimint liostála a fhaightear, bainimid URL an liostála amach.

URL_element = soup.find("a", class_="rfexzly")
listing_data["Listing URL"] = (
    "https://www.airbnb.com" + URL_element["href"] if URL_element else ""
)

Anseo, cuardaímid laistigh dár n-ábhar “soup” do chlib ancair leis an rang “rfexzly”. Má aimsíonn sé an eilimint seo, bainfidh sé an tréith 'href' amach (a bhfuil an URL coibhneasta ann) agus cuirfidh sé leis an URL bonn é chun an URL iomlán liostála a chruthú. Mura n-aimsítear an eilimint, sannfaidh sé teaghrán folamh chun earráidí a sheachaint.

An teideal liostála a bhaint

Ar an gcéad dul síos, bainfimid an URL as gach liostáil. Cuirfidh sé seo ar ár gcumas cuairt a thabhairt ar na leathanaigh liostála aonair níos déanaí más gá.

title_element = listing_element.find("div", class_="t1jojoys")
listing_data["Title"] = (
    title_element.get_text(strip=True) if title_element else ""
)

Tá an teideal laistigh de ghné “div” leis an rang “t1jojoys”. Faighimid ábhar téacs na gné seo, ag baint úsáide as aon spás bán nó trailing. Stóráiltear teaghrán folamh mura bhfaightear an ghné.

An Cur síos ar an Liostú a Bhaint Amach

Description_element = listing_element.find("span", class_="t6mzqp7")
listing_data["Description"] = (
    Description_element.get_text(strip=True) if Description_element else ""
)

Cosúil leis an eastóscadh teidil, faigheann an cód seo gné réise leis an rang "T6MZQP7". Ansin déanaimid ábhar téacs na gné seo a bhaint agus a ghlanadh, ina bhfuil cur síos gairid ar an liosta.

An Rátáil Liostála a Bhaint Amach

rating_element = listing_element.find("span", class_="ru0q88m")
listing_data["Rating"] = (
    rating_element.get_text(strip=True) if rating_element else ""
)

Mar a fheictear sa chód thuas, tá an luach rátála ag eilimint réise leis an rang “Ru0q88m”. Déanaimid an luach seo a bhaint, ag cinntiú go gcuirfidh tú aon spás bán neamhriachtanach i bhfeidhm.

An praghas liostála a bhaint

Ar deireadh, bainimid praghas an liostála amach.

price_element = listing_element.select_one("._1y74zjx")
listing_data["Price"] = (
    f"{price_element.get_text(strip=True)} per night" if price_element else ""
)

Aimsíonn an cód seo an ghné leis an rang "_1y74zjx" laistigh den listing_element reatha. Má fhaightear an ghné seo, a bhfuil an fhaisnéis phraghsanna ann de ghnáth, go mbaintear, go ndéantar a ábhar téacs a bhaint, a ghlanadh agus a chur i gceangal le "in aghaidh na hoíche" chun teaghrán praghsanna níos faisnéiseach a chruthú.

Faisnéis Liostaithe Breise a Bhaint Amach

D'fhéadfadh faisnéis bhreise a bheith ag roinnt liostaí ar féidir linn a bhaint astu.

listing_info_element = listing_element.find("span", {"aria-hidden": "true"})
listing_data["Additional Listing information"] = (
    listing_info_element.get_text(strip=True) if listing_info_element else ""
)

Déanaimid cuardach ar eilimint réise leis an tréith Aria-Hidden = "True" chun aon fhaisnéis bhreise a fháil faoin liostáil. Tar éis na sonraí ábhartha go léir a bhaint as gach eilimint liostála, cuirimid na sonraí bailithe le liosta liostaí.

listings.append(listing_data)

Nuair a bheidh na liostaí go léir próiseáilte, cuirimid liosta na liostaí ar ais, gach ceann acu mar fhoclóir ina bhfuil na sonraí eastósctha.

return listings

Céim 8: Sonraí a scríobh chuig comhad CSV

Tar éis sonraí a scríobadh go rathúil ó leathanaigh liostála Airbnb, is é an chéad chéim thábhachtach eile ná an fhaisnéis luachmhar seo a stóráil le haghaidh anailíse agus tagartha amach anseo. Bainimid úsáid as an leabharlann CSV don tasc seo. Osclaíonn muid comhad CSV i mód a scríobh agus cruthaímid réad CSV.DictWriter. Ansin scríobhfaimid an ceanntásc agus na sonraí chuig an gcomhad.

airbnb_listings = listings(url)

csv_file_path = "proxy_web_listings_output.csv"

with open(csv_file_path, "w", encoding="utf-8", newline="") as csv_file:
    fieldnames = [
        "Listing URL",
        "Title",
        "Description",
        "Rating",
        "Price",
        "Additional Listing information",
    ]
    writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
    writer.writeheader()
    for listing in airbnb_listings:
        writer.writerow(listing)

print(f"Data has been exported to {csv_file_path}")

Seo cód iomlán a d'úsáid muid don rang teagaisc seo:

from seleniumwire import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import time
import csv
import random

# Liosta na seachvótálaithe
proxies = [ 
 "username:password@Your_proxy_IP_Address:Your_proxy_port1",
 "username:password@Your_proxy_IP_Address:Your_proxy_port2",
 "username:password@Your_proxy_IP_Address:Your_proxy_port3",
 "username:password@Your_proxy_IP_Address:Your_proxy_port4",
 "username:password@Your_proxy_IP_Address:Your_proxy_port5",
]

def get_proxy():
    return random.choice(proxies)


def listings(url):

    proxy = get_proxy()
    proxy_options = {
        "proxy": {
            "http": f"http://{proxy}",
            "https": f"http://{proxy}",
            "no_proxy": "localhost,127.0.0.1",
        }
    }

    chrome_options = Options()
    chrome_options.add_argument("--headless")
  

    s = Service(
        "C:/Path_To_Your_WebDriver"
    )  # Cuir do chosán in ionad do chromedriver
    driver = webdriver.Chrome(
        service=s, seleniumwire_options=proxy_options, chrome_options=chrome_options
    )

    driver.get(url)

    time.sleep(8)  # Coigeartú bunaithe ar am ualach an tsuímh ghréasáin

    soup = BeautifulSoup(driver.page_source, "lxml")

    driver.quit()

    listings = []

   # Faigh na heilimintí liostála go léir ar an leathanach
    listing_elements = soup.find_all("div", class_="g1qv1ctd")

    for listing_element in listing_elements:
        # Sonraí a bhaint as gach eilimint liostála
        listing_data = {}

        #URL Liostála
        URL_element = soup.find("a", class_="rfexzly")
        listing_data["Listing URL"] = (
            "https://www.airbnb.com" + URL_element["href"] if URL_element else ""
        )

       # Teideal
        title_element = listing_element.find("div", class_="t1jojoys")
        listing_data["Title"] = (
            title_element.get_text(strip=True) if title_element else ""
        )

        # CUNTAS
        Description_element = listing_element.find("span", class_="t6mzqp7")
        listing_data["Description"] = (
            Description_element.get_text(strip=True) if Description_element else ""
        )

       # Rátáil
        rating_element = listing_element.find("span", class_="ru0q88m")
        listing_data["Rating"] = (
            rating_element.get_text(strip=True) if rating_element else ""
        )

       # Praghas
        price_element = listing_element.select_one("._1y74zjx")
        listing_data["Price"] = (
            f"{price_element.get_text(strip=True)} per night" if price_element else ""
        )

      # Eolas Liostála Breise
        listing_info_element = listing_element.find("span", {"aria-hidden": "true"})
        listing_data["Additional Listing information"] = (
            listing_info_element.get_text(strip=True) if listing_info_element else ""
        )

      # Cuir na sonraí liostála ar an liosta
        listings.append(listing_data)

    return listings


url = "https://www.airbnb.com/s/London--United-Kingdom/homes?tab_id=home_tab&refinement_paths%5B%5D=%2Fhomes&flexible_trip_lengths%5B%5D=one_week&monthly_start_date=2024-01-01&monthly_length=3&price_filter_input_type=0&channel=EXPLORE&query=London%2C%20United%20Kingdom&place_id=ChIJdd4hrwug2EcRmSrV3Vo6llI&date_picker_type=calendar&source=structured_search_input_header&search_type=autocomplete_click"


airbnb_listings = listings(url)

csv_file_path = "proxy_web_listings_output.csv"

with open(csv_file_path, "w", encoding="utf-8", newline="") as csv_file:
    fieldnames = [
        "Listing URL",
        "Title",
        "Description",
        "Rating",
        "Price",
        "Additional Listing information",
    ]
    writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
    writer.writeheader()
    for listing in airbnb_listings:
        writer.writerow(listing)

print(f"Data has been exported to {csv_file_path}")

Cinntíonn an chuid seo den chód go stóráiltear na sonraí scríobtha i gcomhad CSV darb ainm "proxy_web_listings_output.csv".

Toradh

Sábháltar torthaí ár scraper chuig comhad CSV darb ainm “Proxy_web_Listings_Output.csv” mar atá le feiceáil thíos.

5.jpg

Míníonn an treoir seo go héifeachtach conas sonraí a scrape ó liostaí AirBNB ag baint úsáide as Python, rud a chumasaíonn eastóscadh príomh -shonraí amhail praghsanna, infhaighteacht, agus athbhreithnithe. Leagann sé béim ar an tábhacht a bhaineann le seachvótálaithe a úsáid agus iad a rothlú chun cosc ​​a chur ar bhearta frith-bot Airbnb bac a chur orthu.

Tuairimí:

0 tuairimí