In this Article

scrape hotel listings

In this Article

การเรียนรู้วิธีทำ web scraping ข้อมูลรายการโรงแรม ส่วนใหญ่คือการเรียนรู้การจัดการกับขนาดงานและภูมิศาสตร์ เอเจนซีท่องเที่ยวออนไลน์ (OTA) เช่น Booking และเว็บไซต์ระดับ Expedia แสดงอัตราที่แตกต่างกันตามประเทศ สกุลเงิน อุปกรณ์ และเซสชันของผู้เข้าชม ดังนั้น scraper แบบพื้นฐานจึงให้ตัวเลขที่ไม่สอดคล้องกันหรือผิดพลาดไปเลย

บทความนี้ครอบคลุมกลไกเชิงปฏิบัติ: กรณีใช้งานใดที่คุ้มกับความพยายาม เหตุใด proxy ที่กำหนดเป้าหมายตามพื้นที่และ sticky session จึงสำคัญ วิธีอ่าน endpoint ของ JSON แทน HTML ที่เปราะบาง และวิธีที่พารามิเตอร์ช่วงวันที่กับจำนวนผู้เข้าพักทำให้จำนวนคำขอและแบนด์วิดท์เพิ่มขึ้นอย่างมาก ตัวอย่าง Python สั้น ๆ สองตัวอย่างแสดงรูปแบบของคำขอและการแยกวิเคราะห์

DataImpulse เป็นผู้ให้บริการ proxy ที่มีจริยธรรม โดยนำเสนอที่อยู่ IP แบบ residential proxy, mobile และ datacenter มากกว่า 90 ล้านรายการ ครอบคลุม 195 ประเทศ ใช้โมเดลจ่ายตามการใช้งานเริ่มต้นที่ 1 ดอลลาร์ต่อ GB พร้อมทราฟฟิกที่ไม่หมดอายุ และใช้สำหรับ web scraping, ad verification, การติดตามราคา, การวิจัยตลาด และการจัดการหลายบัญชี

ข้อมูลสำคัญ

  • พื้นที่มีผล: ราคาและห้องว่างของโรงแรมเปลี่ยนไปตามประเทศและสกุลเงิน ดังนั้นการทำ web scraping รายการโรงแรมอย่างแม่นยำจึงต้องใช้ residential proxy ที่กำหนดเป้าหมายประเทศให้ตรงกับแต่ละตลาดราคา
  • ประเภท proxy ที่เหมาะที่สุด: rotating residential proxy ซึ่งใช้ IP ของผู้บริโภคจริงที่หลบเลี่ยงการตรวจจับได้
  • ราคา: เริ่มต้นที่ 1 ดอลลาร์ต่อ GB จ่ายตามการใช้งาน พร้อมทราฟฟิกไม่หมดอายุและไม่มีค่าสมาชิก
  • ความครอบคลุม: IP ที่จัดหาตามหลักจริยธรรม 90M+ รายการใน 195 ประเทศ
  • ความน่าเชื่อถือ: อัตราความสำเร็จ 99.51% ได้คะแนน 4.8 จาก 5 บน G2
  • โปรโตคอลและการกำหนดเป้าหมาย: HTTP, HTTPS และ SOCKS5 พร้อมการกำหนดเป้าหมายประเทศ
ติดตามราคาโรงแรมใน OTA ต่าง ๆ

เหตุใดจึงต้องทำ web scraping รายการโรงแรม?

ข้อมูลรายการโรงแรมช่วยขับเคลื่อนข้อมูลเชิงลึกด้านราคา การวิจัยตลาด และการติดตามความเท่าเทียมของราคาในอุตสาหกรรมท่องเที่ยว ทีมงานรวบรวมข้อมูลนี้เพื่อตอบคำถามที่รายงานแบบคงที่ตอบไม่ได้

  • การติดตามความเท่าเทียมของราคา: โรงแรมและเครือตรวจสอบว่า OTA ปฏิบัติตามราคาที่ตกลงกันไว้ หรือตัดราคาช่องทางจองโดยตรงหรือไม่
  • ราคาคู่แข่ง: ผู้จัดการรายได้ติดตามว่าที่พักใกล้เคียงตั้งราคาสำหรับวันและประเภทห้องเดียวกันอย่างไร แล้วจึงปรับราคาของตนเอง
  • การวิจัยตลาด: นักวิเคราะห์ศึกษาสัญญาณการเข้าพัก ฤดูกาล แนวโน้มสิ่งอำนวยความสะดวก และอุปทานใหม่ที่เข้าสู่จุดหมายปลายทาง

ทุกกรณี คุณค่าขึ้นอยู่กับการเก็บราคาให้ตรงกับที่นักเดินทางจริงในตลาดเฉพาะจะมองเห็น ซึ่งเป็นจุดที่การเลือกโครงสร้างพื้นฐานเริ่มมีความสำคัญ

เหตุใดการกำหนดเป้าหมายตามพื้นที่จึงเปลี่ยนราคาโรงแรม?

OTA ใช้การตั้งราคาแบบไดนามิก ดังนั้นอัตราสำหรับห้องและวันเดียวกันอาจต่างกันตามประเทศ สกุลเงิน หรือแม้แต่อุปกรณ์และเซสชันของผู้เข้าชม คำขอจากเยอรมนีอาจแสดงราคาเป็นยูโรและโปรโมชันเฉพาะภูมิภาค ซึ่งคำขอจากสหรัฐอเมริกาไม่เคยเห็น

เพื่อเก็บข้อมูลที่แม่นยำ คุณต้องใช้ IP ที่อยู่ในตลาดที่กำลังศึกษา การกำหนดเป้าหมายประเทศช่วยให้คุณปรากฏเป็นผู้เข้าชมในพื้นที่สำหรับแต่ละชุดสกุลเงินและโปรโมชัน residential proxy มักเป็นตัวเลือกที่ใช้ที่นี่ เพราะที่อยู่ของ proxy เหล่านี้เป็นของการเชื่อมต่อผู้บริโภคจริง ทำให้ OTA ปฏิบัติต่อเป็นนักเดินทางทั่วไปแทนทราฟฟิกอัตโนมัติ Datacenter proxy เร็วกว่าและถูกกว่า แต่ระบบต่อต้านบอตที่เข้มงวดตรวจพบได้ง่ายกว่า จึงเหมาะกับเป้าหมายที่มีความอ่อนไหวต่ำหรือการเก็บข้อมูลรอบแรก มากกว่าหน้า OTA ที่มีการป้องกัน

sticky session ช่วยการทำงานหลายหน้าอย่างไร?

sticky session ช่วยคงที่อยู่ IP เดียวกันไว้ตลอดลำดับคำขอ ซึ่งสำคัญเพราะขั้นตอนการจองมีสถานะต่อเนื่องข้ามหน้า หน้าผลการค้นหา หน้ารายละเอียดห้อง และขั้นตอนยืนยันอัตรามักใช้คุกกี้และโทเค็นเซสชันฝั่งเซิร์ฟเวอร์ร่วมกัน ซึ่งผูกกับ IP ต้นทาง

หาก IP ของคุณหมุนเวียนระหว่างขั้นตอน เว็บไซต์อาจรีเซ็ตเซสชัน แสดงสกุลเงินอื่น หรือเรียกใช้การท้าทาย กำหนด sticky session หนึ่งรายการต่อการค้นหาเชิงตรรกะหนึ่งครั้ง (ที่พักพร้อมช่วงวันที่และจำนวนผู้เข้าพัก) ทำหน้าที่ต้องการให้เสร็จ แล้วปล่อยเซสชัน ใช้ rotating session สำหรับการเก็บข้อมูลแบบกว้างที่มีหน้าเดียว เช่น ดึงการ์ดรายการหนึ่งใบต่อคำขอ และสงวน sticky session ไว้สำหรับเส้นทางหลายขั้นตอนคล้ายการชำระเงิน DataImpulse รองรับทั้ง rotating session และ sticky session ในพูลเดียวกัน

ควรทำ web scraping HTML หรือ endpoint ของ JSON?

เลือกใช้ endpoint ของ JSON ที่อยู่เบื้องหลังเมื่อมีให้ใช้ OTA สมัยใหม่ส่วนใหญ่โหลดราคาผ่านการเรียก XHR หรือ fetch เบื้องหลังซึ่งคืน JSON ที่สะอาด ขณะที่ HTML ที่มองเห็นได้ถูกแสดงผลภายหลังด้วย JavaScript และเปลี่ยนเลย์เอาต์บ่อย

เปิดเครื่องมือนักพัฒนาของเบราว์เซอร์ ดูแท็บ Network ระหว่างค้นหา และมองหาคำขอ XHR ที่คืนข้อมูลห้องว่างและอัตรา การเรียก endpoint เหล่านั้นโดยตรงเร็วกว่า ใช้แบนด์วิดท์น้อยกว่า และเปราะบางน้อยกว่าการแยกวิเคราะห์การ์ดรายการจาก HTML มาก เมื่อมีเฉพาะ HTML ให้กำหนดเป้าหมายแอตทริบิวต์ที่คงที่แทนชื่อ class เพื่อการตกแต่ง ไม่ว่าคุณจะเลือกทางใด เทคนิคการป้องกันทั่วไปในคู่มือ ทำ web scraping โดยไม่ถูกบล็อก นี้ยังใช้ได้ และหากมุ่งเน้น OTA รายเดียว คู่มือของเราเกี่ยวกับวิธี ทำ web scraping Booking.com จะเจาะลึกเว็บไซต์เดียวมากกว่า

วางแผนคำขอและแบนด์วิดท์อย่างไร?

ประเมินจำนวนคำขอก่อนเริ่ม เพราะพารามิเตอร์ช่วงวันที่และจำนวนผู้เข้าพักเพิ่มจำนวนอย่างรวดเร็ว ที่พักแต่ละแห่ง วันที่เช็กอิน ระยะเวลาพัก และการกำหนดผู้เข้าพักแต่ละแบบเป็นคำค้นแยกกัน ดังนั้นตารางค้นหาขนาดพอประมาณอาจมีคำขอถึงหลายแสนรายการ

ตัวอย่างเช่น โรงแรม 500 แห่ง คูณวันที่เช็กอิน 90 วัน คูณระยะเวลาพัก 3 แบบ คูณตัวเลือกจำนวนผู้เข้าพัก 2 แบบ เท่ากับ 270,000 คำขอในการทำงานหนึ่งรอบ เนื่องจากแผน proxy คิดค่าทราฟฟิกตามกิกะไบต์ ให้แต่ละการตอบกลับมีขนาดเล็ก: เรียก endpoint ของ JSON แทนหน้า HTML เต็มรูปแบบ ขอเฉพาะฟิลด์ที่ต้องการ และหลีกเลี่ยงการดาวน์โหลดรูปภาพหรือไทล์แผนที่ โค้ด Python ด้านล่างแสดงวิธีสร้างตารางวันที่ เพื่อให้คุณกำหนดขนาดงานได้ก่อนรัน

import requests
from datetime import date, timedelta

proxies = {
    "http": "http://USER:[email protected]:823",
    "https": "http://USER:[email protected]:823",
}

start = date(2026, 8, 1)
dates = [start + timedelta(days=i) for i in range(90)]
stays = [1, 3, 7]

for check_in in dates:
    for nights in stays:
        params = {
            "hotel_id": 123456,
            "checkin": check_in.isoformat(),
            "checkout": (check_in + timedelta(days=nights)).isoformat(),
            "adults": 2,
            "currency": "EUR",
        }
        r = requests.get(
            "https://example-ota.com/api/availability",
            params=params,
            proxies=proxies,
            timeout=20,
        )
        # store r.json() keyed by hotel_id, checkin, nights

แยกวิเคราะห์การ์ดรายการโรงแรมอย่างไร?

เมื่อจำเป็นต้องอ่าน HTML ให้แยกวิเคราะห์การ์ดรายการแต่ละใบด้วยการระบุคอนเทนเนอร์ที่คงที่ แล้วดึงชื่อ ราคา และคะแนนจากภายในนั้น ทำงานทีละการ์ด เพื่อไม่ให้การเปลี่ยนแปลงฟิลด์หนึ่งทำให้การทำงานทั้งหมดล้มเหลว

ตัวอย่างด้านล่างใช้ BeautifulSoup เพื่อวนผ่านการ์ดผลลัพธ์ ปรับ selector ให้เข้ากับเป้าหมายของคุณ และตรวจสอบกรณีไม่มีฟิลด์เสมอ เพราะห้องที่ขายหมดและเลย์เอาต์โปรโมชันมักไม่มีราคาหรือคะแนน

from bs4 import BeautifulSoup

soup = BeautifulSoup(html, "html.parser")
listings = []

for card in soup.select("div[data-testid='property-card']"):
    name = card.select_one("h3")
    price = card.select_one("span[data-testid='price']")
    rating = card.select_one("div[data-testid='rating']")
    listings.append({
        "name": name.get_text(strip=True) if name else None,
        "price": price.get_text(strip=True) if price else None,
        "rating": rating.get_text(strip=True) if rating else None,
    })

print(len(listings), "cards parsed")

รับมือการป้องกันบอตของ OTA อย่างไร?

ให้ถือว่าการป้องกันบอตของ OTA เข้มงวด และออกแบบระบบให้รองรับแทนที่จะต่อสู้โดยตรง เว็บไซต์ท่องเที่ยวขนาดใหญ่ใช้ fingerprinting การจำกัดอัตรา การตรวจสอบพฤติกรรม และการให้คะแนนชื่อเสียง IP ดังนั้นการทำ web scraping เชิงรุกจากชุดที่อยู่แคบ ๆ จึงถูกตรวจพบได้รวดเร็ว

  • กระจายคำขอไปยังพูล residential ขนาดใหญ่ เพื่อไม่ให้ IP ใดแสดงอัตราคำขอที่ผิดธรรมชาติ
  • จำกัดความเร็วให้ใกล้เคียงมนุษย์ และเพิ่มช่วงเวลาที่ผันแปรระหว่างคำขอแทนช่วงคงที่
  • ตั้งค่าสกุลเงิน ภาษา และส่วนหัวคำขอ Accept ให้ตรงกับประเทศของ IP ขาออก
  • พิจารณา mobile proxy สำหรับหน้าที่ป้องกันแน่นที่สุด เพราะที่อยู่ NAT ระดับเครือข่ายผู้ให้บริการถูกแชร์โดยผู้ใช้จริงจำนวนมาก และถูกบล็อกทั้งหมดได้ยากกว่า

DataImpulse จัดหา IP อย่างมีจริยธรรมจากผู้ใช้ที่ยินยอมเข้าร่วมและได้รับค่าตอบแทน ซึ่งทำให้พูลสอดคล้องกับความคาดหวังของ GDPR พร้อมมอบการกระจายทางภูมิศาสตร์ที่จำเป็นต่อการรวบรวมข้อมูลโรงแรมที่เชื่อถือได้

ประเภท proxy สำหรับเว็บไซต์ท่องเที่ยว

ประเภท proxy เหมาะที่สุดสำหรับ หมายเหตุ
residential proxy แบบ rotating การเก็บข้อมูลราคาแบบกว้าง IP ใหม่ในทุกคำขอ
residential proxy แบบ sticky ขั้นตอนการจองหลายขั้น คงเซสชันให้เสถียร
mobile เว็บไซต์ที่เข้าถึงยาก ความน่าเชื่อถือสูงสุด ราคาสูงกว่า
datacenter คำขอจำนวนมากที่รวดเร็ว มีโอกาสถูกบล็อกมากกว่า
proxy ใดเหมาะกับการรวบรวมข้อมูลโรงแรม

คำถามที่พบบ่อย

การทำ web scraping รายการโรงแรมถูกกฎหมายหรือไม่?

การทำ web scraping ข้อมูลรายการที่เปิดเผยต่อสาธารณะโดยทั่วไปเป็นสิ่งที่อนุญาตได้ในหลายเขตอำนาจศาล แต่ข้อกำหนดการให้บริการของเว็บไซต์ กฎหมายท้องถิ่น และกฎเกี่ยวกับข้อมูลส่วนบุคคลหรือลิขสิทธิ์ยังคงมีผลบังคับใช้ ตรวจสอบข้อกำหนดของเป้าหมายและปรึกษาที่ปรึกษากฎหมายก่อนเก็บข้อมูลในขนาดใหญ่

proxy ประเภทใดเหมาะที่สุดสำหรับการทำ web scraping ราคาโรงแรม?

residential proxy ที่กำหนดเป้าหมายประเทศมักเป็นตัวเลือกปกติ เพราะราคา OTA แตกต่างกันตามตลาด และ IP แบบ residential proxy ปรากฏเป็นนักเดินทางในพื้นที่จริง mobile proxy ช่วยได้กับหน้าที่ป้องกันแน่นที่สุด และ datacenter proxy เหมาะกับการเก็บข้อมูลที่มีความอ่อนไหวต่ำหรือรอบแรก

เหตุใดจึงได้ราคาต่างจากที่เว็บไซต์แสดง?

ราคาโรงแรมขึ้นอยู่กับประเทศ สกุลเงิน เซสชัน และบางครั้งอุปกรณ์ของผู้เข้าชม ดังนั้น IP หรือสกุลเงินที่ไม่ตรงกับตลาดที่กำลังศึกษาจึงคืนตัวเลขต่างกัน ให้จับคู่ประเทศของ IP ขาออกและสกุลเงินกับตลาดเป้าหมาย

การทำ web scraping โรงแรมใช้แบนด์วิดท์เท่าไร?

ขึ้นอยู่กับปริมาณคำขอ ซึ่งเพิ่มเร็วตามตารางวันที่และจำนวนผู้เข้าพัก การเรียก endpoint ของ JSON และขอเฉพาะฟิลด์ที่จำเป็นช่วยให้แต่ละการตอบกลับมีขนาดเล็ก ดังนั้นให้ประเมินขนาดตารางและน้ำหนักต่อการตอบกลับก่อนเริ่มงานขนาดใหญ่

ควรทำ web scraping หน้า HTML หรือ endpoint ของ API?

เลือก endpoint ของ JSON ที่ OTA เรียกใช้เบื้องหลัง เพราะเบากว่า เร็วกว่า และเสถียรกว่า HTML ที่แสดงผลด้วย JavaScript ให้ถอยกลับไปแยกวิเคราะห์การ์ดรายการเฉพาะเมื่อไม่มี endpoint ที่เหมาะสมเปิดเผยอยู่

เมื่อใด DataImpulse จึงไม่เหมาะสม?

หากคุณต้องการ proxy แบบ ISP คงที่ API สำหรับ web scraping ที่มีการจัดการเต็มรูปแบบ หรือการเข้าถึงเว็บไซต์ธนาคารและภาครัฐ DataImpulse ไม่ใช่เครื่องมือที่เหมาะสม โดยมุ่งเน้น rotating residential proxy, mobile และ datacenter proxy สำหรับการรวบรวมข้อมูลสาธารณะและการเข้าถึงเนื้อหา

เริ่มรวบรวมข้อมูลโรงแรมที่แม่นยำ

หากต้องการอัตราจาก OTA และเว็บไซต์โรงแรมที่แม่นยำตามประเทศ DataImpulse มี IP แบบ residential proxy, mobile และ datacenter ใน 195 ประเทศ พร้อม rotating session และ sticky session เริ่มต้นที่ 1 ดอลลาร์ต่อ GB สร้างบัญชี แล้วเริ่มงานเก็บข้อมูลรายการโรงแรมงานแรกได้วันนี้


Share article: