๐Ÿ” Baidu Search Scraper avatar

๐Ÿ” Baidu Search Scraper

Pricing

from $4.99 / 1,000 results

Go to Apify Store
๐Ÿ” Baidu Search Scraper

๐Ÿ” Baidu Search Scraper

Scrape Baidu search results at scale. Extract organic listings, answer boxes, related videos, related searches, and top searches. Supports bulk queries, proxy fallback, date filters, and device/language options for SEO and market research.

Pricing

from $4.99 / 1,000 results

Rating

0.0

(0)

Developer

Scraper Engine

Scraper Engine

Maintained by Community

Actor stats

0

Bookmarked

6

Total users

2

Monthly active users

17 hours ago

Last modified

Share

Baidu Search Scraper โ€” Organic Results, Answer Boxes and Videos

Baidu Search Scraper extracts structured search-results data from Baidu โ€” China's largest search engine โ€” for any query you provide. Each run returns organic listings, answer boxes, related videos, "people also search for" suggestions, related searches, and top/trending searches as typed JSON rows, with no HTML parsing required on your end. Point it at one query or a batch of hundreds, choose desktop or mobile SERP, and start pulling structured results in minutes.

What is Baidu Search Scraper?

Baidu Search Scraper is an Apify Actor that fetches Baidu search-results pages (SERPs) for a list of queries and parses them into a consistent, typed row format โ€” one row per organic result, answer box, video, or related-search suggestion. It runs directly against www.baidu.com or m.baidu.com; no Baidu account, login, or API key is required โ€” the source code contains no authentication step. It's built for SEO analysts tracking Chinese-market rankings, market researchers studying Baidu search behavior, and developers who need Baidu SERP data as clean JSON instead of scraped HTML.

What Baidu search data is publicly available to scrape?

Baidu's search-results pages are fully public โ€” anyone can load baidu.com/s?wd=<query> in a browser without signing in, and everything rendered on that page (organic listings, answer boxes, videos, related searches) is visible with no login wall. What isn't accessible is anything tied to a signed-in Baidu account or an advertiser's own campaign console.

Data CategoryPublicly AvailableRestricted (behind Baidu account / advertiser login)
Organic listings (title, link, snippet, sitelinks)Yesโ€”
Answer boxes / knowledge panelsYesโ€”
Related videosYesโ€”
Related searches, "people also search for," top searchesYesโ€”
Sponsored/ad resultsNo โ€” deliberately excluded by this Actor's extraction logicVisible on-page but filtered out, not an account gate
Personalized results based on search historyNoYes, requires a logged-in Baidu account
Baidu Ads (Baidu Tuiguang) campaign performance dataNoYes, requires an advertiser account and Baidu Ads console

Baidu Search Scraper only returns publicly visible SERP data โ€” what any visitor sees on baidu.com or m.baidu.com. Nothing behind a login wall.

What data can I extract with Baidu Search Scraper?

Baidu Search Scraper returns one flat row per result, tagged with a resultType so organic listings, answer boxes, videos, and related-search suggestions all live in the same dataset with a stable schema.

Field NameDescription
queryThe search query this row belongs to (parsed from your input)
resultTypeRow type: organic, answer_box, related_video, people_also_search_for, related_search, or top_search
titleResult heading โ€” organic result title, answer box title, or video title
linkDestination URL, present on organic, related-video, people-also-search-for, and top-search rows
snippetDescription text under an organic result
displayedLinkThe domain/path shown under an organic result's title
contentThe answer text inside an answer_box row
sourceThe citation/source label inside an answer_box row
searchTermThe suggested query text on people_also_search_for, related_search, and top_search rows
position1-based rank of an organic result within the combined result set for that query
thumbnailImage URL attached to an organic result or related video
richSnippetExtra highlighted text attached to an organic result when Baidu shows one
sitelinksArray of {title, link} sub-links nested under an organic result

Result content fields

query, resultType, title, link, snippet, displayedLink, content, source, searchTerm โ€” these identify the row and carry its text content, whether it's an organic listing, an answer box, or a related-search suggestion.

Position, media and rich-result fields

position, thumbnail, richSnippet, sitelinks โ€” these carry the structural and enrichment data attached to organic results: rank order, images, highlighted extras, and nested sub-links.

๐Ÿค– Add-on: Need more search-engine data?

Running cross-market SEO or SERP comparisons? Pair this with ../Google-Search-Results-Scraper, ../Google-Search-Results-Serp-Scraper, or ../Duckduckgo-Scraper from the same account to compare how the same query ranks across search engines, or ../Google-Scholar-Scraper for academic-search comparisons.

Why not build this yourself?

Baidu has no public API for general web search results, so scraping is the only way to get this data programmatically. Building it yourself means solving three ongoing problems: Baidu's SERP markup uses inconsistent, evolving class names across result types, so brittle CSS selectors break often โ€” this Actor matches on flexible class-name patterns (e.g. result|result-op|c-container) to absorb minor markup changes. Baidu also serves a short anti-bot interstitial page instead of results when it suspects automation, and distinguishing that interstitial from a genuine long SERP that happens to mention "captcha" in unrelated login-widget JavaScript requires page-length-aware detection, not simple keyword matching. And when blocked, recovering means escalating through proxy tiers โ€” this Actor starts with no proxy, then falls back to Apify datacenter proxy, then residential proxy with up to 3 retries โ€” which means paying for and managing proxy infrastructure yourself if you build it from scratch.

How to use Baidu Search Scraper

Baidu Search Scraper is published on the Apify Store and runs entirely on the Apify platform โ€” no separate signup with Baidu is required.

  1. Open Baidu Search Scraper on the Apify Store and click Try for free (or find it in your Apify Console if you already use Apify).
  2. Provide urls โ€” the only required input โ€” as plain search terms (e.g. python tutorial) or Baidu search URLs, one per line.
  3. Optionally set deviceType (desktop/mobile/tablet), languageLocalization, timePeriod, maxPagination, numResults, and startPage to narrow the scrape.
  4. Click Start to run the Actor.
  5. Download results as JSON, CSV, or another format Apify datasets support, or stream them via the Apify API while the run is still in progress.

How to scale to bulk search extraction

urls accepts an array via a multi-line string-list editor โ€” add one query or Baidu URL per line and every line is scraped in the same run. There's no separate "batch mode" to configure: queries are processed sequentially against the same proxy tier, and each query's rows are pushed to the dataset as soon as it finishes, so you can watch results arrive in real time instead of waiting for the whole run to complete.

What can you do with Baidu search data?

  • ๐Ÿ“ˆ An SEO analyst tracking Chinese-market rankings uses position and link alongside query to monitor where a domain ranks on Baidu week over week.
  • ๐Ÿ”Ž A market researcher mapping search intent uses searchTerm from related_search and people_also_search_for rows to see what Chinese users search for around a topic.
  • โœ๏ธ A content strategist auditing SERP features uses answer_box rows' content and source fields to spot which topics trigger Baidu's knowledge panels before writing content.
  • ๐Ÿ“ฑ A localization QA engineer sets deviceType to compare displayedLink and position between www.baidu.com and m.baidu.com for the same query.
  • ๐Ÿค– An AI engineer building a China-market research agent feeds title, snippet, and link from organic rows into a RAG pipeline as retrieval context โ€” no HTML parsing needed since the output is already typed JSON.

How does Baidu Search Scraper handle rate limits and blocking?

The Actor starts every run with no proxy to keep cost down. Before scraping, it sends a probe request; if Baidu returns a blocked status code (403, 429, 503) or its anti-bot interstitial page, it automatically escalates: no proxy โ†’ Apify datacenter proxy โ†’ Apify residential proxy, retrying the residential tier up to 3 times with a short delay between attempts. Once residential proxy succeeds, the run sticks with it for all remaining requests in that run rather than stepping back down. If every page for a specific query still comes back blocked after the normal flow, the Actor makes one more attempt with a freshly drawn residential IP before giving up on that query. A query that ultimately fails produces no output rows for that query rather than a partial or malformed one.

โš ๏ธ On mobile/tablet device type, the numResults value is not sent to Baidu โ€” m.baidu.com was measured to return its anti-bot interstitial when the rn parameter is included, so it's only sent on desktop requests. Per-page result counts on mobile/tablet may therefore differ from what you'd get on desktop for the same query.

โฌ‡๏ธ Input

ParameterRequiredTypeDescriptionExample Value
urlsYesarrayBaidu search URLs or plain search terms, one per line. Plain terms are simplest; URLs are parsed automatically to extract the query.["python tutorial", "machine learning"]
deviceTypeNostringSERP device target. "desktop" uses www.baidu.com (default); "mobile"/"tablet" use m.baidu.com."desktop"
languageLocalizationNointeger1 = All languages (default), 2 = Simplified Chinese, 3 = Traditional Chinese.1
startPageNointegerPage number to start scraping from. 1 = first page (default).1
numResultsNointegerResults requested per page (1โ€“50) via Baidu's rn parameter, and the paging stride. Baidu's actual returned count varies by query/device and isn't guaranteed to match exactly.10
timePeriodNoobjectOptional date filter. Use startDate/endDate for a custom range, or daysAgo for "last N days." Leave empty for no filter.{"daysAgo": 7}
maxPaginationNointegerMax pages to scrape per query (0โ€“10). 0 = no limit, capped at 10 pages.3
outputFileNostringOptional key-value store key. Results always go to the Apify dataset; setting this also saves a summary object to the key-value store under this key."baidu-run-1"
proxyConfigurationNoobjectApify proxy configuration. Default is no proxy at the start of the run; the Actor's own datacenter โ†’ residential fallback still applies on top of whatever you configure here.{"useApifyProxy": false}

Example input

{
"urls": [
"python tutorial",
"https://www.baidu.com/s?wd=machine+learning"
],
"deviceType": "desktop",
"languageLocalization": 1,
"startPage": 1,
"numResults": 10,
"timePeriod": {
"daysAgo": 30
},
"maxPagination": 3,
"outputFile": "",
"proxyConfiguration": {
"useApifyProxy": false
}
}

โฌ†๏ธ Output

Every result row is pushed to the Apify dataset as a typed, normalized JSON object with a consistent schema across runs โ€” organic results, answer boxes, videos, and related-search rows all share the same 13-field row shape, with resultType telling you which one you're looking at. Export the dataset as JSON, CSV, Excel, or any other format Apify datasets support. If you set outputFile, a summary object (per-query totals and full nested results) is additionally written to the Actor's key-value store under that key.

Example output

[
{
"query": "python tutorial",
"resultType": "organic",
"title": "Python ๆ•™็จ‹ - ่œ้ธŸๆ•™็จ‹",
"link": "https://www.runoob.com/python/python-tutorial.html",
"snippet": "Pythonๆ˜ฏไธ€็ง่งฃ้‡Šๅž‹ใ€้ขๅ‘ๅฏน่ฑกใ€ๅŠจๆ€ๆ•ฐๆฎ็ฑปๅž‹็š„้ซ˜็บง็จ‹ๅบ่ฎพ่ฎก่ฏญ่จ€...",
"displayedLink": "www.runoob.com",
"thumbnail": "https://www.baidu.com/img/python-thumb.png",
"position": 1,
"richSnippet": "ๆ›ดๆ–ฐๆ—ถ้—ด: 2026ๅนด8ๆœˆ",
"sitelinks": [
{ "title": "ๅŸบ็ก€่ฏญๆณ•", "link": "https://www.runoob.com/python/python-basic-syntax.html" },
{ "title": "ๅฎ‰่ฃ…ๆ•™็จ‹", "link": "https://www.runoob.com/python/python-install.html" }
]
},
{
"query": "python tutorial",
"resultType": "answer_box",
"title": "Python ็ฎ€ไป‹",
"content": "Pythonๆ˜ฏ็”ฑGuido van RossumไบŽ1991ๅนดๅ‘ๅธƒ็š„็ผ–็จ‹่ฏญ่จ€๏ผŒไปฅ็ฎ€ๆดๆ˜“่ฏป่‘—็งฐใ€‚",
"source": "็™พๅบฆ็™พ็ง‘"
},
{
"query": "python tutorial",
"resultType": "related_search",
"searchTerm": "python tutorial for beginners"
},
{
"query": "python tutorial",
"resultType": "top_search",
"searchTerm": "python 3.13 ๆ–ฐ็‰นๆ€ง",
"link": "https://www.baidu.com/s?wd=python+3.13"
}
]

How does it work?

Baidu Search Scraper sends HTTP requests directly to Baidu's own search endpoints (www.baidu.com/s or m.baidu.com/s) using the same query parameters Baidu's own search box sends โ€” wd for the query, pn for pagination, rn for results per page, rqlang for language, and stf/stftype for date filtering โ€” with a matching desktop or mobile user agent. It starts without a proxy and automatically escalates through Apify datacenter and residential proxy tiers if Baidu blocks the request or serves an anti-bot interstitial. The returned HTML is parsed with BeautifulSoup using flexible class-name matching rather than brittle fixed selectors, and sponsored/ad containers are explicitly filtered out so only organic content is returned. Every result type โ€” organic, answer box, video, related search โ€” is normalized into the same flat row schema, so the output shape stays stable even as Baidu's page layout changes.

Integrations

Baidu Search Scraper runs on the Apify platform, so it works with anything that can call the Apify API โ€” your own scripts, no-code automation tools, and AI agent frameworks.

Calling Baidu Search Scraper programmatically

from apify_client import ApifyClient
client = ApifyClient("<APIFY_API_TOKEN>")
run = client.actor("baidu-search-scraper").call(run_input={
"urls": ["python tutorial", "machine learning"],
"deviceType": "desktop",
"maxPagination": 3,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

Works in Go, Ruby, Node.js, cURL โ€” any language that can make an HTTP request to the Apify API.

No-code tools (n8n, Make, LangChain)

In n8n, use the HTTP Request node pointed at the Actor's run-sync-get-dataset-items endpoint to trigger a run and retrieve results in one step. In Make, use the official Apify app's "Run Actor" module and feed the output into downstream scenarios. In LangChain, use the ApifyWrapper to call this Actor and load results directly as Document objects for a retrieval chain.

Yes โ€” scraping publicly available search-results pages, without logging in and without circumventing access controls, is generally lawful. Baidu Search Scraper returns only what's already visible to any visitor on baidu.com or m.baidu.com. Search results are business/informational data โ€” titles, links, and snippets pulled from public web pages โ€” not personal data, so this falls under Baidu's Terms of Service and database-rights considerations rather than GDPR or CCPA. Consult legal counsel if your use case involves bulk storage of personal data (for example, if scraped snippets happen to contain personal information from third-party pages).

Frequently asked questions

What Baidu search fields does Baidu Search Scraper return?

The top fields are title, link, snippet, displayedLink, and position for organic results, plus resultType to distinguish organic rows from answer boxes, videos, and related-search rows. See What data can I extract for the full field list.

Does Baidu Search Scraper require a Baidu account or login?

No. The Actor sends anonymous HTTP requests to Baidu's public search endpoints โ€” there's no authentication step in the code, and no Baidu credentials are ever requested as input.

How many search results can I extract in one run?

Each query can return up to 50 organic results per page (numResults) across up to 10 pages (maxPagination, capped at 10) โ€” up to 500 organic results per query โ€” plus whatever answer boxes, videos, and related-search rows Baidu serves for that query. You can queue as many queries as you like in the urls array in a single run.

What happens if a query returns zero results?

If Baidu returns no organic results, answer box, videos, or related-search data for a query โ€” whether because the query genuinely has nothing to show or every page for it stayed blocked after retries โ€” no dataset row is pushed for that query, and the run log records it with zero counts. Other queries in the same run are unaffected.

Can I scrape multiple Baidu queries at once?

Yes. urls accepts an array of queries or URLs, one per line, and every one is scraped in the same run.

Does Baidu Search Scraper work with Claude, ChatGPT, and other AI agent tools?

Yes. Apify Actors, including this one, are callable through Apify's Actors MCP Server for MCP-compatible clients like Claude, or as a plain HTTP endpoint by any agent framework that can make API calls.

How does Baidu Search Scraper compare to other Baidu scrapers?

This listing doesn't have verified, current data on competing Baidu scrapers to compare against. What's verifiable from this Actor's own source: it returns six distinct result types (organic, answer box, video, people-also-search-for, related search, top search) in one unified row schema, supports desktop/mobile/tablet targeting, date-range filtering, and automatic proxy escalation โ€” check the data fields table above against any alternative you're considering.

Does Baidu Search Scraper return data in a format LLMs can use directly?

Yes. Output is typed, normalized JSON with consistent field names across runs โ€” no HTML parsing, no CSS selectors. Pass it directly to an LLM as context, index it into a vector store, or feed it to an agent tool.

What happens when Baidu changes its layout or anti-bot system?

The Actor is maintained and its output schema is designed to stay stable across Baidu layout changes โ€” extraction uses flexible class-name pattern matching rather than fixed selectors specifically to absorb minor markup changes. No specific update turnaround is published or guaranteed.

Can I use Baidu Search Scraper without managing proxies or browser infrastructure?

Yes. The Actor handles proxy selection and escalation internally (no proxy โ†’ datacenter โ†’ residential, with automatic retries), and makes plain HTTP requests rather than requiring you to run a browser. You don't need to configure or pay for your own proxy pool to get started.

Which Baidu search fields work best for AI training data and RAG indexing?

For RAG, index title, snippet, and content (from answer box rows) โ€” they carry the highest-information natural-language text. For structured training data, query, resultType, and position give you consistent, typed fields across every row regardless of result type. All fields return as typed primitives or simple nested arrays (sitelinks), never raw HTML.

Scraper NameWhat it extracts
Google Search Results ScraperGoogle SERP organic results, ads, and features for the same query workflow
Google Search Results SERP ScraperStructured Google SERP data with feature-level breakdowns
DuckDuckGo ScraperDuckDuckGo search results for privacy-focused SERP comparisons
Google Scholar ScraperAcademic search results, citations, and paper metadata

Your feedback

Found a bug or missing a field? Let us know via the Issues tab on this Actor's Apify Console page โ€” reports and feature requests are read and help prioritize fixes and improvements.