How to Scrape Trip.com and Ctrip Hotel Reviews in 2026 (Python + a No-Code Shortcut)
Most "Trip.com scrapers" only see half the picture. Trip.com is the international brand, but the same hotel usually has a much larger pool of reviews on its Chinese-domestic sibling, hotels.ctrip.com (ๆบ็จ). If you want honest guest sentiment for a property in Asia, you need both, and you need the Chinese ones translated.
This guide covers what you can pull from a Trip.com or Ctrip review, why the DIY route is a two-headed problem, working Python, a no-code shortcut, and a plain comparison. If you want the deeper reference, there is a full guide to scraping Trip.com and Ctrip reviews 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 detected language - 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 Trip.com & Ctrip Reviews Scraper on Apify reads both feeds in a single run and hands back structured JSON with the Chinese reviews already translated. No login, no proxy setup.
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("factden/ctrip-trip-reviews-scraper").call(run_input={
"startUrls": [
"https://www.trip.com/hotels/macau-hotel-detail-344983/galaxy-hotel/",
"https://hotels.ctrip.com/hotels/1286148.html"
],
"maxReviewsPerHotel": 200,
"sortBy": "mostRecent",
})
for review in client.dataset(run["defaultDatasetId"]).iterate_items():
print(review["source"], review["overallRating"], review["travelType"])
Mix trip.com and hotels.ctrip.com URLs freely. sortBy takes mostRelevant, mostRecent, ratingHighToLow, or ratingLowToHigh, and you can bound results with fromDate / toDate and minRating / maxRating.
What Comes Back: 23 Fields per Review
| Group | Fields |
|---|---|
| Core | reviewId, hotelId, hotelName, hotelUrl, source (trip.com / ctrip), submittedAt |
| Rating | overallRating, ratingLabel, subRatings (Cleanliness, Location, Service, Facilities) |
| Text | reviewText, reviewTextTranslated, isMachineTranslated, language |
| Reviewer | reviewer (name, tier, lifetime reviews, Chinese province for Ctrip) |
| Trip context | travelType, roomName, checkInMonth |
| Signals | recommends, usefulCount, imagesCount, hasVideo, ownerResponse (text, date) |
| AI-ready | markdownContent |
A trimmed sample row (a Chinese review, translated):
{
"source": "ctrip",
"hotelName": "Galaxy Hotel",
"overallRating": 5,
"ratingLabel": "Outstanding",
"subRatings": ["Cleanliness: 5.0", "Location: 5.0", "Service: 5.0", "Facilities: 5.0"],
"language": "zh",
"reviewText": "้
ๅบๅพๆฃ๏ผๆๅกไธๆต๏ผไฝ็ฝฎๆนไพฟใ",
"reviewTextTranslated": "Great hotel, first-class service, convenient location.",
"isMachineTranslated": true,
"travelType": "Family",
"reviewer": {"tier": "Rising review star", "lifetimeReviews": 4},
"ownerResponse": {"text": "ๆ่ฌๆจ็ๆญฃ้ข่ฉๅน...", "date": "2026-06-15"}
}
Full field list and snippets are in the GitHub repo.
Grab a Free Sample Dataset
Want to see the data first? There is a free Trip.com/Ctrip sample (CSV/JSON) here: factden.com/sample-trip. It includes both English and translated-Chinese reviews so you can see the shape.
FAQ
Is scraping Trip.com or Ctrip legal? The reviews are publicly visible. As with any scraping, check the sites' Terms of Service and your local rules, and use the data responsibly.
Is there an official Trip.com / Ctrip reviews API? No public one. Scraping the public pages is the only route for most teams.
Do I get the Chinese reviews in English? Yes. Ctrip reviews come with reviewTextTranslated and an isMachineTranslated flag, alongside the original.
Can I scrape both Trip.com and Ctrip at once? Yes, that is the point. Mix both URL types in one run and the output uses the same schema, tagged by source.
How do I stop getting blocked? Residential proxies and slow pacing, or a tool that reads the internal endpoints per locale. Plain requests will get challenged.
Related
- Doing B2B software instead of hotels? See how to scrape G2 reviews.
- Other FactDen scrapers: Expedia hotel reviews and Indeed jobs and salary data.
Questions, or a field you wish it extracted? Drop a comment.
Comments
No comments yet. Start the discussion.