Most "Trip.com scrapers" only see half the picture. too.
What you can pull from a review
Per review you can get:
Overall rating and a label ("Outstanding"), plus sub-ratings: Cleanliness, Location, Service, Facilities
The review text, plus an English translation of Chinese reviews (reviewTextTranslated), and the detectedlanguage
Trip context: travel type (family, couple, business, solo), room name, check-in month
Reviewer detail: tier ("Review star"), lifetime review count, and for Ctrip the reviewer's Chinese province
Owner responses (text and date), useful counts, photo/video flags
An LLM-ready markdown block per review
The two things that separate a real dataset from a shallow one: the Chinese-domestic feed and its translation.
Why scraping Trip.com and Ctrip is hard
There is no public reviews API. Trip.com Group does not offer one, so scraping the public pages is the only route.
It is two systems, not one.trip.com(international) andhotels.ctrip.com/ 携程 (Chinese) have different structures and languages. A scraper built for one usually misses the other, and the Chinese pool is often the larger one.
Chinese reviews need translation to be usable in an English pipeline, which is a whole extra step.
Bot protection and rate limits apply on both.
So the work is not parsing one page. It is handling both locales, translating, and staying unblocked, on repeat.
Three ways to get the data
| DIY Python | Trip.com & Ctrip actor | Official API | |
|---|---|---|---|
| Setup time | Hours to days | ~30 seconds | Not available (no public reviews API) |
| Both Trip.com + Ctrip feeds | Build two scrapers | One run | n/a |
| Chinese review translation | Add a translation step | Built in | n/a |
| Sub-ratings + owner responses | Parse nested markup | Yes | n/a |
| Cost | Proxies + eng time | Pay-per-result | n/a |
| Best for | One-off | Scheduled, at scale | Not an option |
Option A: DIY in Python
A plain request to a hotel page tends to come back blocked or JavaScript-only:
import httpx
url = "https://www.trip.com/hotels/macau-hotel-detail-344983/galaxy-hotel/"
r = httpx.get(url, headers={"User-Agent": "Mozilla/5.0"})
print(r.status_code) # challenge / JS-rendered shell, reviews not in the HTML
Reviews load through internal endpoints, so you end up reverse-engineering those (per locale), then normalizing two different response shapes, then translating the Chinese text. Doable for one hotel, painful for a portfolio on a schedule.
Option B: the no-code / API shortcut
When you want clean rows, the .
Grab a free sample dataset
Want to see the data first? There is a free Trip.com/Ctrip sample (CSV/JSON) here: . Questions, or a field you wish it extracted? Drop a comment.
SOCIAL SHARE CARD GENERATOR