DEV Community

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) and hotels.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.