DEV Community

Cover image for How to Scrape Fliggy (飞猪) Hotel Reviews in 2026 (Python + a No-Code Shortcut)
Factden
Factden

Posted on Originally published at factden.com

How to Scrape Fliggy (飞猪) Hotel Reviews in 2026 (Python + a No-Code Shortcut)

Fliggy (飞猪) is Alibaba's travel platform, and its hotels hold one of the largest pools of Chinese-traveler feedback anywhere. Popular properties carry tens of thousands of reviews (Hong Kong Disneyland Hotel alone is past 50,000), and almost none of it reaches Western analytics tools. The catch: there is no public endpoint you can just call. Fliggy's review data lives behind a signed mobile API, its hotel pages are gated, and its search needs a session. The moment you want the actual words guests wrote, you are on your own.

This post shows the honest Python starting point, why it stalls, and a no-code shortcut that returns clean rows with one call. There is a longer how to scrape Fliggy hotel reviews writeup on our site too.

What you can pull

Per review: the overall rating on Fliggy's native 1 to 5 scale plus a word label (overallRating, ratingLabel), per-dimension subRatings (location, cleanliness, service, facilities), the original reviewText, the guest's checkInDate and roomName, reviewer basics (level and province via ipLocation), a photo count, optional replies (owner and traveler responses), readable aspect tags, and a self-contained markdownContent block that drops straight into an LLM prompt.

Per hotel (discovery by city): total review count, positive and negative counts and positive-review percentage, a ready-made sentiment aspect-tag summary with mention counts (like 服务热心: 680, 交通便利: 572), Fliggy's own AI review summary plus structured pros and cons, star rating, address, city, phone, opening year and room count.

Why scraping Fliggy reviews is hard

  1. No public reviews API. Alibaba's travel APIs cover inventory and booking, not guest reviews, so reviews are simply not offered through a supported channel.
  2. Signed mobile endpoint. The reviews sit behind Fliggy's H5 mobile API, which requires a per-request signature (a token-plus-timestamp hash). Get the signing wrong and every call comes back rejected.
  3. Pagination that quietly caps. Naive paging stops early on big hotels, so you think you pulled "all" reviews and silently miss the bulk of a 50,000-review corpus.
  4. Chinese-language content. Reviews are mostly Chinese; any tooling that assumes English or a five-star widget mangles the data.
  5. Anti-bot and URL shape. Hotel URLs vary and access is guarded, so keeping a scraper alive is a project on its own.

Three ways to get the data

Approach Setup Handles signing + pagination Coverage Cost model
DIY Python You write and maintain it You build and keep fixing it Whatever you can reach Your time + proxies
Fliggy Hotel Reviews Scraper (Apify) Paste a URL/ID or a city name Yes, done for you Full corpus per hotel, or every hotel in a city Pay per result
Official Alibaba/Fliggy API Partner account N/A None, reviews are not offered Not available

Option A: DIY in Python

Start where everyone starts, a request to the hotel page. The problem shows up immediately: the review text is not in the HTML. It loads separately from the mobile H5 review endpoint, and that endpoint wants a signed request.

import requests

# The hotel page HTML does NOT contain the structured reviews.
r = requests.get("https://www.fliggy.com/jiudian/detail/810100/10023497")
print("guest review" in r.text)  # -> False. The reviews load from a separate signed API.
Enter fullscreen mode Exit fullscreen mode

To get real data you would reverse-engineer the H5 signing (a token plus timestamp hashed per request), replay the review list endpoint page by page until it reports no next page, handle the silent pagination cap, rotate proxies against the anti-bot layer, and keep all of it working as the signing scheme changes. It is doable, but it is weeks of work and ongoing maintenance for one site.

Option B: the no-code shortcut

The Fliggy Hotel Reviews Scraper on Apify does the signing, pagination and anti-bot for you. It has two modes.

Reviews mode takes hotel URLs or a bare hotel ID (shid) and returns every review:

from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("factden/fliggy-hotel-reviews-scraper").call(run_input={
    "mode": "reviews",
    "startUrls": ["https://www.fliggy.com/jiudian/detail/810100/10023497"],
    "maxReviews": 500,
    "sortBy": "newest",
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row["overallRating"], row["ratingLabel"], row["reviewText"])
Enter fullscreen mode Exit fullscreen mode

Discovery mode takes city names in any language and returns one summary row per hotel (rating, positive percentage, sentiment tags, AI summary):

run = client.actor("factden/fliggy-hotel-reviews-scraper").call(run_input={
    "mode": "discovery",
    "searchCities": ["Hong Kong"],
    "maxHotels": 20,
})
Enter fullscreen mode Exit fullscreen mode

You can also sort newest-first or by Fliggy's recommended ranking, set a from-date cutoff for cheap incremental syncs, and export to JSON, CSV, Excel, or pull from the API on a schedule. Field docs and copy-paste snippets are in the GitHub repo.

What does it cost?

About $4 per 1,000 reviews plus a small per-run start fee, and $0.01 per hotel summary row in discovery mode, pay per result. New Apify accounts get free platform credit to try it end to end. No login, no API key for Fliggy, and a China IP is not required.

Wrap-up

Fliggy holds a massive, mostly untapped pool of Chinese-traveler sentiment. Rolling your own scraper means fighting a signed mobile API, silent pagination caps and anti-bot changes. If you just want clean, structured rows, the Fliggy Hotel Reviews Scraper gets you there in one run, by city or by URL. Happy scraping.

Top comments (0)