Airbnb มี ที่พักที่เปิดให้จองอยู่กว่า 8 ล้านรายการ ในกว่า 220 ประเทศ — และไม่มี API สาธารณะสำหรับข้อมูลตลาดเลย ถ้าคุณต้องการข้อมูลเชิงลึกด้านราคา ข้อมูลเทียบคู่แข่ง หรือชุดข้อมูลสำหรับการวิจัย การดึงข้อมูลแทบจะเป็นทางเลือกเดียว
แต่ปัญหาคือ Airbnb เป็นหนึ่งในเว็บไซต์ที่ดึงข้อมูลยากที่สุดบนเว็บยุคนี้ มันใช้ WAF แบบกำหนดเองที่ทำงานร่วมกับ Akamai Bot Manager แสดงผลทุกอย่างฝั่งไคลเอนต์ด้วย React และสลับชื่อคลาส CSS ไปเรื่อย ๆ เหมือนช่างกุญแจหวาดระแวงที่เปลี่ยนลูกกุญแจทุกวัน ผมใช้เวลาพอสมควรกับการทดสอบแนวทางต่าง ๆ สำหรับการดึงข้อมูล Airbnb — ตั้งแต่ไลบรารี HTTP แบบเบา ไปจนถึงการอัตโนมัติผ่านเบราว์เซอร์เต็มรูปแบบ และเครื่องมือ AI แบบไม่ต้องเขียนโค้ด — และความจริงก็คือ ไม่มีวิธีไหนที่เหมาะกับทุกกรณีได้แบบสมบูรณ์
คู่มือนี้จะพาคุณไล่ครบทั้ง 5 วิธีที่ใช้งานได้จริง พร้อมโค้ดจริง ข้อดีข้อเสียแบบตรงไปตรงมา และทิปปฏิบัติที่ช่วยไม่ให้ IP ของคุณโดนบล็อกหายเข้ากลีบเมฆ ไม่ว่าคุณจะเป็นนักพัฒนา Python นักวิเคราะห์ข้อมูล หรือผู้ลงทุนอสังหาฯ ที่แค่อยากได้สเปรดชีต คู่มือนี้มีเส้นทางที่เหมาะกับคุณ
ทำไมต้องดึงข้อมูล Airbnb? ตัวอย่างการใช้งานจริง
ไม่มีใครดึงข้อมูล Airbnb เพราะอยากนั่งแกะ HTML แบบซ้อนหลายชั้นหรอก ทุกคนมีโปรเจกต์และเป้าหมายทางธุรกิจของตัวเอง — นี่คือ 6 กรณีที่พบบ่อยที่สุด:
| กรณีใช้งาน | สิ่งที่กำลังดึงข้อมูล | ใครใช้ |
|---|---|---|
| กลยุทธ์ตั้งราคาแบบไดนามิก | ราคาต่อคืนของคู่แข่งในรัศมีที่กำหนด | เจ้าของที่พัก, ผู้จัดการทรัพย์สิน |
| วิเคราะห์การลงทุน | ตัวชี้วัดการเข้าพัก (ความถี่รีวิว, ความพร้อมของปฏิทิน), ADR, RevPAR | นักลงทุนอสังหาริมทรัพย์ |
| เปรียบเทียบค่าทำความสะอาด | ค่าทำความสะอาดแยกตามประเภทที่พัก (ช่วงเฉลี่ยตั้งแต่ $81–$335 ในเมืองใหญ่ของสหรัฐฯ) | เจ้าของที่พัก, ที่ปรึกษาด้านราคา |
| วิเคราะห์ความรู้สึกจากรีวิว | รีวิวของผู้เข้าพักสำหรับการประมวลผลภาษาธรรมชาติ/การให้คะแนนความรู้สึก | นักวิทยาศาสตร์ข้อมูล, ทีมงานธุรกิจบริการ |
| งานวิจัยเชิงวิชาการ | ชุดข้อมูลระดับตลาดสำหรับนโยบายที่อยู่อาศัย การท่องเที่ยว และเศรษฐศาสตร์เมือง | นักวิจัย (48.7% ของ งานวิจัยที่เกี่ยวข้องกับ Airbnb จำนวน 1,021 ชิ้น ใช้ข้อมูลที่ดึงมา) |
| ติดตามคู่แข่ง | รายการที่พักใหม่ การเปลี่ยนราคา และความพร้อมให้จองเมื่อเวลาผ่านไป | ผู้ประกอบการ STR, นักวิเคราะห์ตลาด |
สำหรับกรณีใช้งานต่อเนื่อง เช่น การติดตามราคา หรือการเฝ้าดูคู่แข่ง การดึงข้อมูลแบบตั้งเวลา หรือแบบอัตโนมัติ จะคุ้มค่าเป็นพิเศษ — คุณต้องการข้อมูลใหม่ ๆ ไม่ใช่ภาพถ่ายชั่วขณะครั้งเดียว
ตลาดที่พักระยะสั้นเติบโตเร็วกว่าโรงแรมแบบดั้งเดิม: ความต้องการ STR เพิ่มขึ้น 6.0% ในปี 2025 ขณะที่ความต้องการโรงแรมลดลง 0.3% ถ้าคุณอยู่ในสายนี้ ข้อมูลคือแต้มต่อของคุณ
อะไรทำให้ Airbnb ดึงข้อมูลยาก
ก่อนจะเขียนโค้ดแม้แต่บรรทัดเดียว ช่วยทำความเข้าใจก่อนว่าทำไม Airbnb ถึงถูกจัดว่า ยากระดับ 4 จาก 5 ในแง่การดึงข้อมูล มี 3 ปัญหาที่ซ้อนทับกันอยู่
ระบบป้องกันบอทของ Airbnb
Airbnb ใช้ WAF แบบกำหนดเองร่วมกับ Akamai Bot Manager ซึ่งเป็นระบบตรวจจับบอทระดับองค์กรที่ประเมินทุกคำขอพร้อมกันหลายมิติ นี่ไม่ใช่แค่การจำกัดอัตราคำขอ แต่เป็นการทำฟิงเกอร์พรินต์ด้วย AI

ลำดับชั้นของการตรวจจับตามระดับความเสี่ยง:
- TLS Fingerprinting (สูง): ไลบรารี
requestsของ Python มีลักษณะ TLS handshake เฉพาะตัวที่ไม่เหมือนเบราว์เซอร์จริง Akamai วิเคราะห์ cipher suites, extensions และลำดับ ALPN ด้วยวิธี JA3/JA4 คำขอแบบrequestsมาตรฐานมีอัตราสำเร็จเพียงประมาณ 12% บนเว็บไซต์ที่มีการป้องกัน เทียบกับ 92% สำหรับไลบรารีที่ปลอมฟิงเกอร์พรินต์ TLS ให้เหมือนเบราว์เซอร์ - การรัน JavaScript (สูง): Akamai ใช้สคริปต์ฝั่งไคลเอนต์เพื่อเก็บ “sensor data” — คุณสมบัติของอุปกรณ์ ความสามารถของฮาร์ดแวร์ รายละเอียดระบบปฏิบัติการ — ข้อมูลนี้จะสร้างคุกกี้
_abckถ้าไม่รัน JavaScript นี้ คำขอจะถูกบล็อก - Browser Fingerprinting (สูง): การวิเคราะห์ Canvas, WebGL และฟอนต์จะตรวจจับเครื่องมืออัตโนมัติ เบราว์เซอร์แบบ headless จะมีธง
navigator.webdriverปลั๊กอินหายไป และค่าฮาร์ดแวร์ที่ไม่สอดคล้องกัน - การวิเคราะห์ HTTP Header (สูง): การขาด header
Sec-Fetch-*เป็น สาเหตุที่พบบ่อยและชัดเจนของการถูกบล็อก 403 บน Airbnb - ชื่อเสียงของ IP (ปานกลาง): IP จากดาต้าเซ็นเตอร์จะถูกบล็อกทันที จำเป็นต้องใช้ residential proxy เมื่อสเกลการใช้งานจริง
- การวิเคราะห์พฤติกรรม (ปานกลาง): จังหวะการร้องขอที่สม่ำเสมอเกินไป ไม่มีการขยับเมาส์ ไม่มีการเลื่อนหน้า — ล้วนเป็นสัญญาณที่มองออกง่าย
เมื่อโดนบล็อก คุณจะเห็น: 403 Forbidden (ฟิงเกอร์พรินต์ไม่ผ่าน), 429 Too Many Requests (เกินอัตรา), 503 Service Unavailable (หน้า challenge ของ Akamai) หรือหน้า CAPTCHA
หน้าเว็บ Airbnb ที่เปลี่ยนแปลงตลอดและพึ่ง JavaScript หนักมาก
ถ้าใช้ requests.get() แบบธรรมดากับ Airbnb คุณจะได้แค่ React shell พร้อม HTML ตัวอย่าง — ไม่มีข้อมูลที่พักจริง ๆ อย่างที่ นักพัฒนาคนหนึ่งอธิบายไว้: “คำขอ HTTP ธรรมดาใช้ไม่ได้จริง และถ้าไม่มี proxy ที่เหมาะกับการเรนเดอร์ JavaScript จริง คุณไม่ได้กำลังดึงข้อมูลจาก Airbnb คุณกำลังดึงแค่ตัวแทนข้อมูล”
ข้อมูลจริงจะถูกดึงฝั่งไคลเอนต์ผ่านการเรียก API ภายในแบบ GraphQL (/api/v3/StaysSearch สำหรับผลการค้นหา, /api/v3/PdpPlatformSections สำหรับรายละเอียดที่พัก) นั่นหมายความว่าข้อมูลสำคัญส่วนใหญ่ต้องใช้ทั้งเบราว์เซอร์เต็มรูปแบบ หรือการดักจับ API
DOM เปลี่ยนตลอดเวลา
Airbnb ใช้ CSS-in-JS กับชื่อคลาสแบบแฮชที่เปลี่ยนทุกครั้งที่มีการ deploy ตัวอย่างที่มีการบันทึกไว้ ได้แก่ _tyxjp1, lxq01kf, atm_mk_h2mmj6, t1jojoys และ _8s3ctt อย่างที่ Automatio (2025) อธิบายไว้: “คลาสเหล่านี้ไม่ได้ถูกออกแบบมาให้เสถียร และสามารถเปลี่ยนได้ทุกเมื่อ บ่อยครั้งโดยไม่มีการเปลี่ยนแปลงที่มองเห็นได้บนหน้าเว็บ”
ชุมชนนักพัฒนาได้บันทึกปัญหานี้ไว้อย่างละเอียด ScrapingBee ระบุ ว่า “คลาส CSS เปลี่ยนตลอดเวลา และการพึ่งพามันเป็นวิธีที่เร็วมากในการทำให้สคริปต์ดึงข้อมูลพัง” นักพัฒนาที่มีประสบการณ์คนหนึ่งใน DEV Community สรุปได้ดีว่า “สคริปต์ที่ช้ากว่า 50% แต่ไม่เคยพัง มีค่ามากกว่าสคริปต์ที่เร็วแต่ล้มทุกสัปดาห์แบบเทียบกันไม่ได้”
ประมาณการในอุตสาหกรรมระบุว่า ตอนนี้มีตัวครอลเลอร์ 10–15% ที่ต้องได้รับการแก้ไขทุกสัปดาห์ เนื่องจาก DOM เปลี่ยน ฟิงเกอร์พรินต์อัปเดต หรือ endpoint ถูกจำกัดอัตรา
เลือกแนวทางของคุณ: 5 วิธีในการดึงข้อมูล Airbnb
ก่อนจะลงมือเขียนโค้ด นี่คือการเปรียบเทียบ แต่ละวิธีมีข้อแลกเปลี่ยนจริง ๆ — ไม่มีวิธีไหนที่ “ดีที่สุด” สำหรับทุกกรณี
| แนวทาง | ความยากในการตั้งค่า | ความเร็ว | ความทนทานต่อบอท | การดูแลรักษา | เหมาะสำหรับ |
|---|---|---|---|---|---|
HTTP ตรงล้วน (requests / pyairbnb) | ต่ำ | เร็ว | ปานกลาง (เปราะต่อการเปลี่ยนแปลงของ API) | ปานกลาง | งานวิจัยเร็ว ๆ, ชุดข้อมูลขนาดเล็ก |
| อัตโนมัติผ่านเบราว์เซอร์ (Selenium) | สูง | ช้า | ปานกลาง | สูง (DOM พังง่าย) | เนื้อหาแบบไดนามิก, ราคาที่ขึ้นกับวันที่ |
| อัตโนมัติผ่านเบราว์เซอร์ (Playwright) | ปานกลาง | ปานกลาง | ปานกลาง-สูง | ปานกลาง | ทางเลือกสมัยใหม่แทน Selenium |
| Scraping API (ScrapingBee, Bright Data) | ต่ำ | เร็ว | สูง (มีการหมุน proxy ในตัว) | ต่ำ | การดึงข้อมูลระดับสเกล, งานใช้งานจริง |
| แบบไม่ต้องเขียนโค้ด (Thunderbit) | น้อยมาก | เร็ว | สูง (AI ปรับตามการเปลี่ยนเลย์เอาต์) | ไม่มี | คนที่ไม่ใช่นักพัฒนา, การวิเคราะห์ครั้งเดียว |
เนื้อหาที่เหลือของบทความนี้จะพาไล่ดูแนวทาง Python ทีละขั้นตอน และปิดท้ายด้วยส่วนแบบไม่ต้องเขียนโค้ดสำหรับคนที่อยากข้ามการลงมือเขียนโปรแกรมไปเลย
ทีละขั้นตอน: ดึงข้อมูล Airbnb ด้วย Python โดยใช้ Requests (แนวทางเริ่มจาก HTTP)
นี่คือทางเลือกที่เบาและเริ่มได้เร็ว — ไม่ต้องใช้เบราว์เซอร์ ไม่ต้องปวดหัวกับ chromedriver ข้อแลกเปลี่ยนคือ: ใช้ได้กับข้อมูลบางส่วน แต่ไม่ใช่ทั้งหมด
ตั้งค่าสภาพแวดล้อม Python ของคุณ
สร้างโฟลเดอร์โปรเจกต์และตั้งค่า virtual environment:
mkdir airbnb-scraper && cd airbnb-scraper
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install requests beautifulsoup4 pandas pyairbnb
pyairbnb เป็นไลบรารีน้ำหนักเบา (126 ดาวบน GitHub, อัปเดตล่าสุดเดือนกุมภาพันธ์ 2026) ที่ดักจับ GraphQL API StaysSearch ภายในของ Airbnb มันไม่ได้ดึง HTML เลย ซึ่งทำให้ทนต่อการเปลี่ยนแปลงของ CSS class ได้ดี โมเดลที่ดูแลโดยผู้พัฒนาคนเดียวเป็นความเสี่ยงอยู่บ้าง แต่ก็มีการอัปเดตอย่างต่อเนื่อง
ตัวเลือก A: ใช้ pyairbnb สำหรับผลการค้นหาแบบเร็ว ๆ
เส้นทางที่เร็วที่สุดในการได้ข้อมูล Airbnb ที่เป็นโครงสร้าง:
import pyairbnb
import pandas as pd
# ค้นหาตามสถานที่และวันที่
results = pyairbnb.search_all(
query="Austin, TX",
checkin="2025-08-01",
checkout="2025-08-03",
adults=2,
currency="USD"
)
# แปลงเป็น DataFrame
df = pd.DataFrame(results)
print(df[['name', 'price', 'rating', 'reviewsCount', 'url']].head())
df.to_csv("airbnb_austin.csv", index=False)
pyairbnb ยังรองรับ get_details(), get_price(), get_reviews(), get_calendar() และ get_listings_from_user() ด้วย ทุกฟังก์ชันรองรับพารามิเตอร์ proxy URL สำหรับการหมุน IP
ตัวเลือก B: ส่ง HTTP request เองด้วย BeautifulSoup
ถ้าคุณไม่อยากพึ่งไลบรารีของบุคคลที่สาม คุณสามารถส่งคำขอโดยตรงได้ แต่ขอเตือนไว้ก่อนว่า requests แบบธรรมดาจะโดนบล็อกเร็วมากเพราะ TLS fingerprinting การใช้ curl_cffi ซึ่งปลอมฟิงเกอร์พรินต์ TLS ให้เหมือนเบราว์เซอร์ จะช่วยเพิ่มอัตราสำเร็จได้มาก
from curl_cffi import requests as cffi_requests
from bs4 import BeautifulSoup
import json
url = "https://www.airbnb.com/s/Austin--TX/homes?checkin=2025-08-01&checkout=2025-08-03&adults=2"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
"Accept-Language": "en-US,en;q=0.9",
"Sec-Fetch-Dest": "document",
"Sec-Fetch-Mode": "navigate",
"Sec-Fetch-Site": "none",
"Sec-Fetch-User": "?1",
}
response = cffi_requests.get(url, headers=headers, impersonate="chrome131")
soup = BeautifulSoup(response.text, "html.parser")
การดึงข้อมูลจาก Schema.org Microdata
Airbnb ฝัง schema.org microdata ไว้ใน HTML โดยตรง — และแท็กเชิงความหมายเหล่านี้ เสถียรกว่า selector ของ CSS class มาก ให้มองหาคอนเทนเนอร์ itemprop="itemListElement":
listings = soup.find_all("div", itemprop="itemListElement")
data = []
for listing in listings:
name_tag = listing.find("meta", itemprop="name")
url_tag = listing.find("meta", itemprop="url")
position_tag = listing.find("meta", itemprop="position")
data.append({
"name": name_tag["content"] if name_tag else None,
"url": url_tag["content"] if url_tag else None,
"position": position_tag["content"] if position_tag else None,
})
df = pd.DataFrame(data)
df.to_csv("airbnb_listings.csv", index=False)
ข้อจำกัดคือ: แท็ก schema.org ให้ได้แค่ชื่อที่พัก URL และลำดับรายการ — แต่ไม่ให้ราคาคะแนนรีวิว หรือสิ่งอำนวยความสะดวก ถ้าต้องการข้อมูลที่ครบกว่านี้ คุณต้องใช้การอัตโนมัติผ่านเบราว์เซอร์ หรือดักจับ API
ทีละขั้นตอน: ดึงข้อมูล Airbnb ด้วย Python โดยใช้ Selenium หรือ Playwright
เมื่อคุณต้องการเนื้อหาแบบไดนามิก — ราคาที่ขึ้นกับวันที่ สิ่งอำนวยความสะดวกที่ซ่อนอยู่หลังปุ่ม "Show more" หรือข้อความรีวิวเต็ม — การอัตโนมัติผ่านเบราว์เซอร์คือเครื่องมือที่เหมาะที่สุด
เมื่อไหร่ควรใช้การอัตโนมัติผ่านเบราว์เซอร์
- หน้าที่ต้องเลือกวันที่ก่อนถึงจะเห็นราคาจริง
- สิ่งอำนวยความสะดวกและรีวิวที่ซ่อนอยู่หลังองค์ประกอบแบบโต้ตอบ
- ข้อมูลใด ๆ ที่โหลดหลังจากรัน JavaScript เท่านั้น
- เมื่อคุณต้องโต้ตอบกับหน้าเว็บ (เลื่อนหน้า คลิก)
Selenium กับ Playwright: ตอนนี้ Playwright ชนะไปแล้วเป็นส่วนใหญ่
Playwright แซง Selenium ขึ้นมาเป็นเครื่องมืออัตโนมัติผ่านเบราว์เซอร์ที่นิยมกว่า มันเร็วกว่า มี async support ในตัว ติดตั้งไบนารีของเบราว์เซอร์ให้อัตโนมัติ และรับมือกับเว็บแอปยุคใหม่ได้ดีกว่า ปัญหาเรื้อรังของ Selenium เรื่อง ChromeDriver เวอร์ชันไม่ตรงกับ Chrome ซึ่งมักตามอัปเดต Chrome ไม่ทัน ยังเป็นเรื่องปวดหัวอยู่เสมอ
อย่างไรก็ตาม Selenium ก็มีระบบนิเวศของบทสอนและคำตอบใน StackOverflow ที่ใหญ่กว่า — ดังนั้นใช้ตัวที่คุณถนัดจะดีที่สุด
การติดตั้ง Playwright
pip install playwright playwright-stealth
playwright install chromium
เข้าไปยัง Airbnb และดึงรายการที่พัก
import asyncio
from playwright.async_api import async_playwright
from playwright_stealth import stealth_async
import json
async def scrape_airbnb():
async with async_playwright() as p:
browser = await p.chromium.launch(headless=False) # headless=True เสี่ยงกว่า
context = await browser.new_context(
viewport={"width": 1920, "height": 1080},
user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
)
page = await context.new_page()
await stealth_async(page)
url = "https://www.airbnb.com/s/Austin--TX/homes?checkin=2025-08-01&checkout=2025-08-03&adults=2"
await page.goto(url, wait_until="networkidle")
# รอให้การ์ดที่พักปรากฏ โดยใช้ data-testid (เสถียรกว่าคลาส)
await page.wait_for_selector('[data-testid="card-container"]', timeout=15000)
# ดึงข้อมูลที่พัก
listings = await page.query_selector_all('[data-testid="card-container"]')
results = []
for listing in listings:
title_el = await listing.query_selector('[data-testid="listing-card-title"]')
subtitle_el = await listing.query_selector('[data-testid="listing-card-subtitle"]')
title = await title_el.inner_text() if title_el else None
subtitle = await subtitle_el.inner_text() if subtitle_el else None
results.append({"title": title, "subtitle": subtitle})
await browser.close()
return results
data = asyncio.run(scrape_airbnb())
ดักจับ GraphQL API (วิธี DIY ที่น่าเชื่อถือที่สุด)
แทนที่จะมานั่งแยก DOM ที่พังตลอดเวลา คุณสามารถดักจับการเรียก API ภายในของ Airbnb ได้ วิธีนี้จะได้ JSON ที่สะอาดและมีโครงสร้าง:
api_responses = []
async def handle_response(response):
if "StaysSearch" in response.url:
try:
data = await response.json()
api_responses.append(data)
except:
pass
page.on("response", handle_response)
await page.goto(url, wait_until="networkidle")
# แปลง response ของ API
if api_responses:
search_results = api_responses[0]["data"]["presentation"]["staysSearch"]["results"]["searchResults"]
for result in search_results:
listing = result.get("listing", {})
pricing = result.get("pricingQuote", {})
print(f"{listing.get('name')} — {pricing.get('price', {}).get('total')}")
response ของ StaysSearch มี id, name, roomTypeCategory, bedrooms, bathrooms, personCapacity, avgRating, reviewsCount, isSuperhost และรายละเอียดราคาแบบเต็ม ข้อมูลชุดนี้คือข้อมูลเดียวกับที่หน้า frontend ของ Airbnb ใช้เรนเดอร์หน้าเว็บ
การจัดการ Pagination
Airbnb แสดงประมาณ 18 รายการต่อหน้า และใช้พารามิเตอร์ URL items_offset โดยมีจำนวนสูงสุดราว 17 หน้า (~300 รายการต่อการค้นหา)
import time
import random
base_url = "https://www.airbnb.com/s/Austin--TX/homes?checkin=2025-08-01&checkout=2025-08-03&adults=2"
all_results = []
for page_num in range(17): # สูงสุดประมาณ 17 หน้า
offset = page_num * 18
paginated_url = f"{base_url}&items_offset={offset}"
# ... ไปยังหน้าและดึงข้อมูลเหมือนด้านบน ...
time.sleep(random.uniform(3, 7)) # หน่วงแบบสุ่มระหว่างหน้า
วิธีดึงข้อมูลราคา Airbnb ด้วย Python (แก้ปัญหาราคาที่ขึ้นกับวันที่)
นี่คือส่วนที่บทความสอนส่วนใหญ่ข้าม — และเป็นส่วนที่สำคัญที่สุดสำหรับการวิเคราะห์ราคา
ทำไมราคา Airbnb ถึงไม่แสดงถ้าไม่ระบุวันที่
ประมาณ 90% ของเวลา Airbnb จะต้องมีวันที่เช็กอิน/เช็กเอาต์ก่อนถึงจะแสดงราคาจริง ถ้าไม่มีวันที่ คุณจะเห็นแค่ช่วง “ราคาต่อคืน” แบบคลุมเครือ (หรือบางครั้งก็ไม่มีราคาเลย) อย่างที่ ScrapingBee ระบุ: “ถ้ารายการที่พักไม่แสดงราคา (เช่น Airbnb ต้องการให้คุณปรับวันที่หรือจำนวนผู้เข้าพัก) ฟังก์ชันก็จะส่งกลับ None”
ข่าวดีคือ: ณ เดือนเมษายน 2025 ตอนนี้ Airbnb แสดงราคารวม (รวมค่าธรรมเนียมทั้งหมดก่อนภาษี) เป็นค่าเริ่มต้น สำหรับผู้เข้าพักทั่วโลกแล้ว ก่อนหน้านี้มีตัวเลือก “Display Total Price” ให้สลับใช้ — และมีผู้เข้าพักเกือบ 17 ล้านคนใช้มันก่อนที่มันจะกลายเป็นค่าเริ่มต้น
ส่งวันที่ผ่านพารามิเตอร์ URL
อย่าลืมใส่ checkin และ checkout ใน URL การค้นหาของคุณเสมอ:
https://www.airbnb.com/s/Austin--TX/homes?checkin=2025-08-01&checkout=2025-08-03&adults=2
สิ่งนี้จะกระตุ้นให้ Airbnb แสดงราคาต่อคืนและราคารวมที่แท้จริงทั้งในหน้าเว็บและใน response ของ API
ไล่ช่วงวันที่เพื่อวิเคราะห์ราคา
สำหรับเจ้าของที่พักและนักลงทุนที่ต้องการข้อมูลราคาตามฤดูกาล:
from datetime import datetime, timedelta
start_date = datetime(2025, 7, 1)
end_date = datetime(2025, 12, 31)
stay_length = 2 # คืน
current = start_date
date_ranges = []
while current + timedelta(days=stay_length) <= end_date:
checkin = current.strftime("%Y-%m-%d")
checkout = (current + timedelta(days=stay_length)).strftime("%Y-%m-%d")
date_ranges.append((checkin, checkout))
current += timedelta(days=7) # ทุกสัปดาห์
for checkin, checkout in date_ranges:
url = f"https://www.airbnb.com/s/Austin--TX/homes?checkin={checkin}&checkout={checkout}&adults=2"
# ... ดึงข้อมูลราคา ...
time.sleep(random.uniform(5, 10)) # เว้นจังหวะอย่างสุภาพ
ตอนแยกข้อมูลราคาจาก GraphQL API response ให้มองหาอ็อบเจ็กต์ pricingQuote ซึ่งมี price.total, price.priceItems (รายการย่อยเช่น ค่าทำความสะอาด ค่าบริการ) และ rate.amount (ราคาต่อคืน)
ทำให้สคริปต์ดึงข้อมูล Airbnb ด้วย Python ทนต่อการออกแบบเว็บใหม่
นี่คือส่วนการดูแลรักษาที่ไม่มีใครอยากเขียน — แต่จริง ๆ แล้วอาจเป็นส่วนที่สำคัญที่สุดของโปรเจกต์ดึงข้อมูล Airbnb ทุกโปรเจกต์
Selector แบบเปราะบาง vs แบบทนทาน
| กลยุทธ์ตัวเลือก | ความเสี่ยงที่พัง | ความพยายามเขียนโค้ด | ตัวอย่าง |
|---|---|---|---|
ชื่อ CSS class (เช่น .t1jojoys) | 🔴 สูง — เปลี่ยนบ่อย | ต่ำ | soup.select('.t1jojoys') |
แอตทริบิวต์ data-testid | 🟡 ปานกลาง — เสถียรกว่า | ต่ำ | soup.select('[data-testid="listing-card-title"]') |
| Schema.org microdata ใน HTML | 🟢 ต่ำ — มาตรฐานเชิงโครงสร้าง | ปานกลาง | soup.find("meta", itemprop="name") |
| ดักจับ GraphQL API | 🟢 ต่ำ — JSON แบบมีโครงสร้าง | ปานกลาง | response.json()["data"]["presentation"] |
| การดึงข้อมูลด้วย AI (Thunderbit) | 🟢 ไม่มี — ปรับตามอัตโนมัติ | ไม่มี | UI แค่ 2 คลิก ไม่ต้องเขียนโค้ด |
ใช้แอตทริบิวต์ data-testid
ค่า data-testid ที่มีการบันทึกไว้ใน Airbnb ตอนนี้ ได้แก่ card-container, listing-card-title, listing-card-subtitle, และ listing-card-name ค่านี้ผูกกับระบบทดสอบภายในของ Airbnb ไม่ใช่การจัดสไตล์ จึงเปลี่ยนบ่อยน้อยกว่าคลาส CSS แต่ก็ยังเปลี่ยนได้ เพียงแต่ไม่บ่อยเท่า
# ทนทานกว่าการเลือกด้วยคลาส
title = await page.query_selector('[data-testid="listing-card-title"]')
ใช้ Schema.org Microdata
Airbnb ใช้แอตทริบิวต์ itemprop อยู่ในมาร์กอัป HTML โดยตรง ซึ่งเป็นไปตามมาตรฐานเว็บและเปลี่ยนแปลงน้อยกว่าคลาส CSS ที่ใช้ตกแต่งมาก:
# ดึงรายการที่พักทั้งหมดโดยใช้มาร์กอัป schema.org
listings = soup.find_all("div", itemprop="itemListElement")
for listing in listings:
name = listing.find("meta", itemprop="name")["content"]
url = listing.find("meta", itemprop="url")["content"]
ดักจับ GraphQL API
แนวทาง DIY ที่น่าเชื่อถือที่สุด API ภายในของ Airbnb ส่ง JSON แบบสะอาดที่มีโครงสร้างมาให้ frontend ใช้ต่อ response format เปลี่ยนช้ากว่า DOM เพราะทีม frontend เองก็ต้องพึ่งมันเช่นกัน
ทำไมการดึงข้อมูลด้วย AI ถึงกำจัดภาระการดูแลรักษาได้หมด
แม้แต่กลยุทธ์ selector ที่ดีที่สุดก็ยังพังได้ในที่สุด ค่า data-testid อาจถูกเปลี่ยนชื่อ โครงสร้าง response ของ API อาจถูกเวอร์ชันใหม่ แนวทางเดียวที่กำจัดภาระการดูแลได้จริงคือวิธีที่อ่านหน้าเว็บใหม่ทุกครั้งด้วย AI — ไม่มี selector ที่ฝังค่าไว้ล่วงหน้าเลย ดูเพิ่มเติมในส่วน Thunderbit ด้านล่าง
วิธีหลีกเลี่ยงการถูกบล็อกเมื่อดึงข้อมูล Airbnb
ทิปใช้งานจริงจากประสบการณ์และฉันทามติของชุมชน
หมุน Proxy (ต้องใช้ Residential เท่านั้น)
IP จากดาต้าเซ็นเตอร์จะถูก Airbnb บล็อกทันที จำเป็นต้องใช้ residential proxy เมื่อทำในระดับใช้งานจริง ผู้ให้บริการชั้นนำตามประสิทธิภาพและราคา:
| ผู้ให้บริการ | ราคา (ต่อ GB) | อัตราความสำเร็จ | หมายเหตุ |
|---|---|---|---|
| Decodo (เดิม Smartproxy) | ประมาณ ~$2.20/GB ที่ 100GB | 99.68% | เร็วที่สุดในการวัด (ตอบสนอง 0.54 วินาที) |
| Bright Data | ประมาณ ~$5.04/GB ที่ 100GB | 99%+ | พูลใหญ่ที่สุด ฟีเจอร์ครบที่สุด |
| Oxylabs | ประมาณ ~$4/GB ที่ 100GB | 99%+ | เด่นสำหรับอีคอมเมิร์ซ |
ข้อสังเกตสำคัญจากนักพัฒนาที่มีประสบการณ์: “การหมุน IP ทุกครั้งที่ส่งคำขอจริง ๆ แล้วดูน่าสงสัยเกินไป ผู้ใช้จริงจะคง IP เดิมไว้ตลอดเซสชัน” คำแนะนำคือใช้ sticky session 5–10 นาที แล้วค่อยหมุนทุก 20–30 คำขอ
proxies = {
"http": "http://user:pass@residential-proxy:port",
"https": "http://user:pass@residential-proxy:port",
}
response = cffi_requests.get(url, headers=headers, proxies=proxies, impersonate="chrome131")
ลดความถี่ของคำขอ
ฉันทามติของชุมชนเกี่ยวกับขีดจำกัดที่ปลอดภัย:
- จำนวนหน้าสูงสุดต่อชั่วโมง: ≤100 (~1.6/นาที)
- ช่วงพักระหว่างคำขอ: 3–10 วินาที (สุ่ม และถ้าได้ให้ใช้การกระจายแบบ Gaussian)
- พักระหว่างเซสชัน: ทุก ๆ 20 คำขอ ให้หยุด 30–60 วินาที
- ช่วงเวลาที่เหมาะกับการดึงข้อมูล: ช่วงนอกพีค (~2 ทุ่มตามเวลาท้องถิ่น)
- เมื่อเจอ 429: ใช้ exponential backoff พร้อม jitter
import random
import time
delay = random.gauss(5, 1.5) # ค่าเฉลี่ย 5 วินาที ส่วนเบี่ยงเบนมาตรฐาน 1.5
delay = max(2, min(delay, 10)) # จำกัดให้อยู่ระหว่าง 2-10 วินาที
time.sleep(delay)
ใช้ headers ให้ครบและสอดคล้องกัน
การขาด header Sec-Fetch-* เป็น สาเหตุที่พบบ่อยและชัดเจนของการถูกบล็อก 403 ทุก header ต้องสอดคล้องกันภายใน ถ้า User-Agent ของคุณบอกว่าเป็น Chrome 131 บน Windows ทุก header อื่นก็ต้องสื่อถึงตัวตนนั้นตรงกัน
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.9",
"Accept-Encoding": "gzip, deflate, br",
"Sec-Fetch-Dest": "document",
"Sec-Fetch-Mode": "navigate",
"Sec-Fetch-Site": "none",
"Sec-Fetch-User": "?1",
"Sec-CH-UA": '"Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24"',
"Sec-CH-UA-Platform": '"Windows"',
}
ใช้เบราว์เซอร์แบบ Headless อย่างระมัดระวัง
สำหรับ Playwright แพ็กเกจ playwright-stealth จะช่วยแพตช์โมดูลหลบเลี่ยงราว 17 รายการ (navigator.webdriver, plugins, languages, WebGL) แต่ระบบป้องกันบอทยุคใหม่ตรวจสอบคุณสมบัติมากกว่า 40 รายการ เทียบกับที่ถูกแพตช์ราว 12 รายการ การรันแบบไม่ headless (headless=False) ปลอดภัยกว่าแต่ช้ากว่า
สำหรับ Selenium undetected-chromedriver จะช่วยแพตช์ไบนารี ChromeDriver เพื่อลบตัวบ่งชี้ของการทำงานอัตโนมัติ แต่โหมด headless ก็ยังไม่ค่อยเสถียร
พิจารณาใช้ Scraping API เมื่อทำในสเกลใหญ่
ถ้าคุณกำลังดึงข้อมูลนับพันหน้า Scraping API จะจัดการ proxy rotation การแก้ CAPTCHA และการเรนเดอร์ JavaScript ให้คุณ ใน การทดสอบเปรียบเทียบ URL Airbnb 250 รายการของ AIMultiple Bright Data ทำอัตราสำเร็จได้ 99% พร้อม 48 ฟิลด์ต่อรายการที่พัก ข้อแลกเปลี่ยนคือค่าใช้จ่าย — โหมด stealth proxy ของ ScrapingBee ใช้เครดิต 75 เท่าต่อคำขอ ดังนั้นแพ็กเกจเดือนละ $49 จะทำได้เพียงราว 3,333 คำขอแบบ stealth
ดึงข้อมูล Airbnb โดยไม่ใช้ Python: ทางเลือกแบบไม่ต้องเขียนโค้ดด้วย Thunderbit
ไม่ใช่ทุกคนที่ดึงข้อมูล Airbnb จะเป็นนักพัฒนา เจ้าของที่พักอยากได้ราคาเปรียบเทียบ นักลงทุนอยากได้ข้อมูลตลาด นักวิเคราะห์อยากได้สเปรดชีต ถ้าคุณอ่านมาถึงส่วน Python แล้วคิดว่า “นี่ต้องดูแลเยอะกว่าที่ตั้งใจไว้” ส่วนนี้เหมาะกับคุณ
Thunderbit ดึงข้อมูล Airbnb ได้ในไม่กี่คลิกอย่างไร
Thunderbit คือ AI web scraper ที่ทำงานในรูปแบบ ส่วนขยาย Chrome ขั้นตอนการทำงานมีดังนี้:
- ติดตั้งส่วนขยาย จาก Chrome Web Store
- ไปยังหน้าผลการค้นหา Airbnb — ใส่วันที่ใน URL เพื่อให้ได้ราคาที่แม่นยำ (เช่น
?checkin=2025-08-01&checkout=2025-08-03) - คลิก “AI Suggest Fields” — Thunderbit จะสแกนหน้าและตรวจจับคอลัมน์อย่างชื่อที่พัก ราคา คะแนน ที่ตั้ง และ URL ให้อัตโนมัติ
- คลิก “Scrape” — ข้อมูลจะถูกเติมลงในตารางที่มีโครงสร้าง
- ใช้ “Scrape Subpages” เพื่อเข้าไปยังหน้าแต่ละที่พักแล้วดึงสิ่งอำนวยความสะดวก รีวิว ข้อมูลโฮสต์ และรายละเอียดราคาทั้งหมด — โดยไม่ต้องตั้งค่าเพิ่ม
- ส่งออก ไปยัง Google Sheets, Excel, Airtable หรือ Notion
ฟีเจอร์การดึงข้อมูลซับเพจสำคัญมากในจุดนี้ ในแนวทาง Python ถ้าจะดึงหน้ารายละเอียดต้องเขียนตรรกะแยกต่างหาก จัดการ pagination ภายในรีวิว และควบคุมคำขอแบบขนาน แต่ด้วย Thunderbit แค่คลิกเดียว
ทำไม Thunderbit ถึงแก้ปัญหา Airbnb สามเรื่องใหญ่ได้
สามปัญหาที่พูดถึงก่อนหน้า — ระบบป้องกันบอท การเรนเดอร์ JavaScript และ DOM ที่พังง่าย — นี่แหละคือสิ่งที่ทำให้สคริปต์ Python ต้องดูแลเยอะ Thunderbit จัดการได้ครบทั้งสาม:
- ไม่ต้องกังวลเรื่อง IP ถูกบล็อก: โหมด Cloud Scraping ของ Thunderbit จัดการการหมุน proxy ภายในระบบ
- ไม่ต้องกังวล selector พัง: AI อ่านหน้าเว็บใหม่ทุกครั้ง — ไม่มี CSS selector ให้ต้องดูแล และไม่ต้องอัปเดตโค้ดเมื่อ Airbnb ปรับดีไซน์
- ไม่ต้องวุ่นกับการตั้งค่า: ไม่มี Selenium driver ไม่มีสภาพแวดล้อม Python ไม่มีปัญหา dependency ชนกัน
- ดึงข้อมูลแบบตั้งเวลาได้: อธิบายช่วงเวลาเป็นภาษาธรรมชาติสำหรับการติดตามราคาอย่างต่อเนื่อง — เหมาะมากสำหรับกรณีใช้กับกลยุทธ์ตั้งราคาแบบไดนามิกและการติดตามคู่แข่ง
ควรใช้ Python เมื่อไหร่ และควรใช้ Thunderbit เมื่อไหร่
นี่ไม่ใช่แบบเลือกอย่างใดอย่างหนึ่งเสมอไป — ขึ้นอยู่กับสิ่งที่คุณต้องการ:
| ความต้องการ | Python | Thunderbit |
|---|---|---|
| ควบคุมตรรกะการดึงข้อมูลได้เต็มที่ | ✅ ใช่ | ❌ ไม่ได้ |
| ใช้ได้โดยไม่ต้องมีทักษะเขียนโค้ด | ❌ ไม่ได้ | ✅ ใช่ |
| รับมือการเปลี่ยนแปลงของ DOM อัตโนมัติ | ❌ ไม่ได้ | ✅ ใช่ (ใช้ AI) |
| ดึงข้อมูลซับเพจ (หน้ารายละเอียด) | ตั้งค่ายุ่งยาก | คลิกเดียว |
| ดึงข้อมูลตามกำหนด/เป็นประจำ | ต้องทำ cron job เอง | มีตัวตั้งเวลาในตัว |
| ส่งออกไป Sheets/Excel/Airtable | ต้องเขียนโค้ดเอง | มีในตัว |
| เชื่อมเข้ากับ data pipeline | ✅ ใช่ | จำกัด |
| ต้นทุนเมื่อทำในสเกลใหญ่ (10K+ หน้า) | ค่าเซิร์ฟเวอร์ + proxy | ราคา Thunderbit |
ถ้าคุณต้องการการควบคุมระดับโค้ด ตรรกะแบบกำหนดเอง หรือเชื่อมเข้ากับ data pipeline ที่มีอยู่แล้ว ให้ใช้ Python ถ้าคุณต้องการข้อมูลไว ๆ โดยไม่ต้องดูแลรักษา Thunderbit คือทางเลือกที่ใช้งานได้จริง
เคล็ดลับด้านกฎหมายและจริยธรรมสำหรับการดึงข้อมูล Airbnb
ขอสรุปสั้นและใช้งานได้จริงไว้ก่อน — ผมไม่ใช่ทนาย และนี่ไม่ใช่คำแนะนำทางกฎหมาย
ตามกฎหมายโดยภาพรวม:
- คำตัดสิน hiQ Labs v. LinkedIn ระบุว่าการดึงข้อมูลสาธารณะจากเว็บไซต์ที่ไม่ต้องยืนยันตัวตนไม่ถือว่าละเมิด CFAA
- Meta v. Bright Data (มกราคม 2024): ผู้พิพากษาวินิจฉัยว่า Terms of Service ไม่ผูกมัดสคริปต์ที่เข้าถึงแบบไม่ได้ล็อกอิน
- คดี Reddit v. Perplexity AI (2025) เสนอทฤษฎีใหม่ว่าการเลี่ยง CAPTCHA และ rate limit อาจละเมิดบทบัญญัติ anti-circumvention ของ DMCA — เรื่องนี้ยังไม่เคยทดสอบจริง แต่ควรติดตาม
Airbnb ว่าอย่างไร: ข้อกำหนดการให้บริการ ของ Airbnb ห้ามการเก็บข้อมูลอัตโนมัติโดยชัดเจน อย่างไรก็ตาม Airbnb ไม่เคยฟ้องสคริปต์ดึงข้อมูลแบบสาธารณะอย่างเปิดเผย Inside Airbnb ดำเนินงานมาแล้วกว่า 11 ปีโดยไม่มีคดีทางกฎหมาย แม้ Airbnb จะเรียกมันว่า “ขยะ” ก็ตาม
แนวทางปฏิบัติ:
- ดึงเฉพาะข้อมูลที่เปิดให้สาธารณะเข้าถึง (อย่าเลี่ยงหน้าล็อกอิน)
- เคารพแนวทางใน
robots.txt - อย่าโหลดเซิร์ฟเวอร์หนักด้วยอัตราคำขอที่ก้าวร้าวเกินไป
- จัดการข้อมูลส่วนบุคคลอย่างระมัดระวังภายใต้ GDPR/CCPA
- ถ้าเป็นงานเชิงพาณิชย์ ควรปรึกษาทนายความ
สรุปและประเด็นสำคัญ
การดึงข้อมูล Airbnb มีตั้งแต่แบบ “เร็วและพอใช้ไปก่อน” ไปจนถึง “ระดับพร้อมใช้งานจริงในโปรดักชัน” ประเด็นสำคัญ:
- ใส่วันที่ใน URL เสมอ (
checkinและcheckout) — ถ้าไม่มี ข้อมูลราคาจะใช้ไม่ได้ - อย่าพึ่งชื่อ CSS class ใช้
data-testid, schema.org microdata หรือดักจับ GraphQL API แทน - จำเป็นต้องใช้ residential proxy เมื่อทำในสเกลใหญ่ IP จากดาต้าเซ็นเตอร์จะถูกบล็อกทันที
- ลดความถี่ของคำขอ — หน่วงแบบสุ่ม 3–10 วินาที ใช้ sticky session และทำ exponential backoff เมื่อเกิด error
- ถ้าต้องการดึงข้อมูลแบบไม่ต้องดูแลรักษา เครื่องมือ AI อย่าง Thunderbit ช่วยกำจัดปัญหา selector พังได้ทั้งหมด — ซึ่งเป็นปัญหาเดียวกับที่ทำให้สคริปต์ Python มีต้นทุนการบำรุงรักษาสูง
- เลือกเครื่องมือให้ตรงกับงาน งานวิจัยเร็ว ๆ?
pyairbnb. วิเคราะห์ราคาแบบไดนามิก? Playwright พร้อมดักจับ API. เฝ้าติดตามต่อเนื่องโดยไม่เขียนโค้ด? Thunderbit. งานระดับโปรดักชัน? ใช้ Scraping API
ลองใช้ Thunderbit สำหรับการดึงข้อมูล Airbnb
ถ้าคุณอยากลองเส้นทางไม่ต้องเขียนโค้ด Thunderbit มีแพ็กเกจใช้ฟรี — คุณสามารถลองกับหน้า Airbnb ไม่กี่หน้าภายในประมาณสองนาที สำหรับแนวทาง Python โค้ดทุกแพตเทิร์นในบทความนี้พร้อมให้คุณปรับใช้กับกรณีของคุณได้เลย
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับแนวทางและเครื่องมือการดึงข้อมูลเว็บ ลองดูคู่มือของเราเรื่อง การดึงข้อมูลจากเว็บไซต์เป็น Excel, AI web scraper ที่ดีที่สุด และ แนวปฏิบัติที่ดีที่สุดสำหรับการดึงข้อมูลเว็บ คุณยังสามารถดูวิดีโอสอนบน ช่อง YouTube ของ Thunderbit ได้ด้วย
คำถามที่พบบ่อย
Airbnb บล็อกคุณได้ไหมถ้าดึงข้อมูล?
ได้ Airbnb ใช้ Akamai Bot Manager ร่วมกับ TLS fingerprinting, JavaScript challenge, browser fingerprinting และการให้คะแนนชื่อเสียง IP หากตรวจพบ คุณจะได้รับ response แบบ 403, 429 หรือ CAPTCHA การหมุน proxy ใช้ header ที่สมจริง และการลดความถี่คำขอช่วยลดความเสี่ยงได้ แต่ไม่มีวิธีที่รับประกันว่าจะไม่ถูกตรวจพบเมื่อทำในปริมาณมาก
การดึงข้อมูล Airbnb ถูกกฎหมายไหม?
โดยทั่วไป การดึงข้อมูลสาธารณะถือว่าอนุญาตได้ตามแนวคำพิพากษาในสหรัฐฯ (hiQ v. LinkedIn, Meta v. Bright Data) แต่ Terms of Service ของ Airbnb ห้ามไว้ชัดเจน สถานะทางกฎหมายแตกต่างกันไปตามเขตอำนาจศาล และทฤษฎี DMCA anti-circumvention ที่กำลังเกิดขึ้น (Reddit v. Perplexity) อาจส่งผลต่อสคริปต์ที่หลีกเลี่ยงมาตรการป้องกันบอท สำหรับการใช้งานเชิงพาณิชย์ ควรปรึกษาทนายความ
ดึงข้อมูลอะไรจาก Airbnb ได้บ้าง?
จากหน้าผลการค้นหา: ชื่อที่พัก ราคา (เมื่อระบุวันที่) คะแนน จำนวนรีวิว ที่ตั้ง ประเภทที่พัก และ URL จากหน้ารายละเอียด: คำอธิบายเต็ม สิ่งอำนวยความสะดวก ข้อมูลโฮสต์ รีวิวทั้งหมด รูปภาพ ความพร้อมในปฏิทิน ค่าทำความสะอาด และรายละเอียดการคิดราคา ความลึกของข้อมูลขึ้นอยู่กับว่าคุณดึงเฉพาะหน้าค้นหา หรือเข้าไปยังหน้าที่พักแต่ละรายการด้วย
ถ้าจะดึงข้อมูล Airbnb ด้วย Python ต้องใช้ proxy ไหม?
ถ้าเป็นไม่กี่หน้า คุณอาจพอทำได้โดยไม่ใช้ proxy แต่ถ้าเกิน 20–30 คำขอ แนะนำให้ใช้ residential proxy rotation อย่างยิ่ง IP จากดาต้าเซ็นเตอร์จะถูกบล็อกทันที ฉันทามติของชุมชนระบุว่าควรจำกัดราว 100 หน้า ต่อชั่วโมงจาก IP เดียว และเว้นระยะสุ่ม 3–10 วินาทีระหว่างคำขอ
วิธีที่ง่ายที่สุดในการดึงข้อมูล Airbnb แบบไม่ต้องเขียนโค้ดคืออะไร?
ส่วนขยาย Chrome ของ Thunderbit ช่วยให้คุณดึงผลการค้นหา Airbnb และหน้ารายละเอียดที่พักได้ด้วยการตรวจจับฟิลด์ด้วย AI — ไม่ต้องตั้งค่า selector ไม่ต้องเขียนโค้ด รองรับการดึงข้อมูลซับเพจ (สำหรับสิ่งอำนวยความสะดวก รีวิว และข้อมูลโฮสต์) ส่งออกไป Google Sheets, Excel, Airtable หรือ Notion และมีการดึงข้อมูลแบบตั้งเวลาสำหรับการติดตามราคาอย่างต่อเนื่อง
เรียนรู้เพิ่มเติม


