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.
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:
Tá gach coimeádán liostála fillte i ngné div leis an tréith seo a leanas: class = "g1qv1ctd".
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.
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:
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:
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.
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
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
Anois go bhfuil timpeallacht fhíorúil curtha ar bun agat, is féidir leat na leabharlanna riachtanacha a shuiteáil.
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
É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ú.
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.
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".
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”.
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)
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.
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ú.
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.
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.
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é.
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.
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.
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ú.
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
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".
Sábháltar torthaí ár scraper chuig comhad CSV darb ainm “Proxy_web_Listings_Output.csv” mar atá le feiceáil thíos.
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