DEV Community

Cover image for How to pull China A-share sentiment signals — retail, analyst & news — with Python (2026)
Sami
Sami

Posted on

How to pull China A-share sentiment signals — retail, analyst & news — with Python (2026)

For a quant or alt-data desk, Chinese A-shares are a rich, under-covered sentiment universe. FactSet literally sells "Guba Analytics" and "Xueqiu Analytics" side by side as retail-sentiment feeds, and every sell-side desk in China publishes ratings daily. The problem is plumbing: three different sources, three different anti-bot setups, no clean API.

Here's how to pull the three layers that actually move a name — retail chatter, analyst ratings, and live news — keyless, in Python, and fuse them into one read.

The demo: Kweichow Moutai (600519) right now

I ran all three on 贵州茅台 (Kweichow Moutai) — China's bellwether liquor stock — a few minutes ago. Here's the picture that falls out:

1. Retail sentiment (Eastmoney Guba 股吧) — net sentiment +0.13 across the latest posts (2 positive / 13 neutral / 0 negative). The retail crowd is buzzing about a price hike:

Post Sentiment Reads
飞天茅台价格大涨 — "Feitian Moutai price surges" positive 255
茅台宣布涨价 — "Moutai announces price increase" neutral 681
i茅台半小时售罄 — "i-Moutai app sold out in 30 min" neutral 873

2. Analyst ratings (Eastmoney 研报) — the sell-side is unanimous. The latest reports, keyed to the ticker:

Broker Rating Change
诚通证券 (Chengtong) 买入 Buy maintain
华鑫证券 (Huaxin) 买入 Buy maintain
万联证券 (Wanlian) 增持 Accumulate maintain
开源证券 (Kaiyuan) 买入 Buy maintain

3. News flow (CLS 财联社) — the live telegraph stream, each flash tagged with a bull/bear score and the tickers it names, so market-moving headlines wire straight into an event model.

Put together: retail mildly bullish on a price-hike story, analysts uniformly Buy/Accumulate, steady news flow — a coherent, quantifiable read you can track over time.

How to pull each one

Each is a separate keyless Actor (no API key, no login). Minimal inputs:

Retail sentimentChina A-Share Guba Sentiment Monitor:

{ "stockCodes": ["600519", "300750"], "sentimentAnalysis": true }
Enter fullscreen mode Exit fullscreen mode

Returns each post with a bull/bear score, read/reply counts, and a per-ticker rollup (net sentiment, share-of-voice, positive/negative split).

Analyst ratingsChina A-Share Analyst Research Monitor:

{ "reportType": "stock", "stockCodes": ["600519"], "ratingChangesOnly": true }
Enter fullscreen mode Exit fullscreen mode

Set ratingChangesOnly to get just the upgrades and downgrades — the tradable event is a broker moving a rating (增持 → 买入 is an upgrade).

News flowChina Financial Flash News Monitor (CLS 财联社):

{ "stockCodes": ["600519"], "sentimentAnalysis": true }
Enter fullscreen mode Exit fullscreen mode

Filters the real-time telegraph to flashes that name your watchlist.

For the price/retail layer of the same name, Xueqiu (雪球) is the other retail source institutions buy alongside Guba.

Fusing it into one signal

The three layers answer different questions — what retail feels, what the sell-side rates, what just happened. Blended per ticker (retail net-sentiment + a rating score + news flow), they give you a single composite bull/bear read you can rank a watchlist by. Because each Actor keys everything on a stable id, you can turn on delta mode + an Apify Schedule and each run returns only what's new — a gap-free per-ticker sentiment time series, paying only for genuinely new items.

That time series — not any single snapshot — is what a systematic model actually consumes.

Questions or a field you need? Open an issue on any of the Actor pages.

Top comments (0)