{"adoption": {"forks": 346, "observed_at": "2026-08-28T04:05:33.845520+00:00", "stars": 1769}, "canonical_url": "https://ross.abutalabs.com/products/crawlproject", "card": {"archived": false, "artifact_type": "learning-resource", "description": "python爬虫项目合集，从基础到js逆向，包含基础篇、自动化篇、进阶篇以及验证码篇。案例涵盖各大网站(xhs douyin weibo ins boss job，jd...)，你将会学到有关爬虫以及反爬虫、自动化和验证码的各方面知识", "domain": ["crawlers", "tutorials", "developer-tools"], "enriched": true, "function": ["web-scraping", "developer-tools", "workflow-automation"], "health_score": 20, "homepage": null, "language": "JavaScript", "license": null, "license_family": "other", "maturity": "active", "member_repos": ["xishandong/crawlProject"], "name": "xishandong/crawlProject", "platform": ["python", "cross-platform"], "pushed_at": "2024-09-23T11:27:25+00:00", "repo": "xishandong/crawlProject", "stars": 1769, "tags": ["crawler", "anti-crawler", "js-reverse-engineering", "captcha", "playwright", "selenium", "scrapy", "ddddocr", "educational-projects", "automation", "javascript"], "topics": ["playwright", "python", "python-crawler", "reverse-engineering", "captcha", "ddddocr", "javascript"], "urls": [], "use_cases": ["learn web scraping from scratch with python", "practice bypassing anti-crawler protections", "reverse engineer javascript encryption in website requests", "automate browsers with playwright and selenium", "solve slider and click captchas with ddddocr", "learn scrapy and async crawling", "study real scraping cases for popular chinese websites"], "what_it_is": "A collection of hands-on Python web scraping practice projects ranging from beginner requests-based crawlers to JavaScript reverse engineering, browser automation, and captcha solving. It covers real-world cases from sites like Xiaohongshu, Douyin, Weibo, Instagram, Boss Zhipin, and JD, organized into difficulty-rated sections (basics, automation, advanced, captcha).", "when_to_avoid": ["you need a production-ready scraping library or maintained tool rather than practice code", "you plan commercial use - the author explicitly forbids it", "you need guaranteed working examples, since some projects may no longer be reproducible"], "when_to_choose": ["you want graded, hands-on crawler exercises from beginner to advanced", "you need examples of js reverse engineering, webpack, browser fingerprinting, and wasm challenges", "you want to learn captcha solving and browser automation in python"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/crawlproject", "repo": "xishandong/crawlProject", "role": "main", "score": 28}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:33.845520+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:26:08.420329+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "388b34ea19a9478f62797d7a1ba8dac0d2544638ada9e89e3cc87f94630d1a7a", "fetched_at": "2026-08-28T04:05:33.845520+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xishandong/crawlProject"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:33.845520+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:26:08.420329+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "388b34ea19a9478f62797d7a1ba8dac0d2544638ada9e89e3cc87f94630d1a7a", "fetched_at": "2026-08-28T04:05:33.845520+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xishandong/crawlProject"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:26:08.420329+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "388b34ea19a9478f62797d7a1ba8dac0d2544638ada9e89e3cc87f94630d1a7a", "fetched_at": "2026-08-28T04:05:33.845520+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xishandong/crawlProject"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:05:33.845520+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:33.845520+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:33.845520+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:26:08.420329+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "388b34ea19a9478f62797d7a1ba8dac0d2544638ada9e89e3cc87f94630d1a7a", "fetched_at": "2026-08-28T04:05:33.845520+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xishandong/crawlProject"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:33.845520+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:33.845520+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:26:08.420329+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "388b34ea19a9478f62797d7a1ba8dac0d2544638ada9e89e3cc87f94630d1a7a", "fetched_at": "2026-08-28T04:05:33.845520+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xishandong/crawlProject"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:33.845520+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:33.845520+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:33.845520+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:26:08.420329+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "388b34ea19a9478f62797d7a1ba8dac0d2544638ada9e89e3cc87f94630d1a7a", "fetched_at": "2026-08-28T04:05:33.845520+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xishandong/crawlProject"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:33.845520+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:33.845520+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:26:08.420329+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "388b34ea19a9478f62797d7a1ba8dac0d2544638ada9e89e3cc87f94630d1a7a", "fetched_at": "2026-08-28T04:05:33.845520+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xishandong/crawlProject"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:26:08.420329+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "388b34ea19a9478f62797d7a1ba8dac0d2544638ada9e89e3cc87f94630d1a7a", "fetched_at": "2026-08-28T04:05:33.845520+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xishandong/crawlProject"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:26:08.420329+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "388b34ea19a9478f62797d7a1ba8dac0d2544638ada9e89e3cc87f94630d1a7a", "fetched_at": "2026-08-28T04:05:33.845520+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xishandong/crawlProject"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:26:08.420329+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "388b34ea19a9478f62797d7a1ba8dac0d2544638ada9e89e3cc87f94630d1a7a", "fetched_at": "2026-08-28T04:05:33.845520+00:00", "kind": "readme", "missing": false, "url": "https://github.com/xishandong/crawlProject"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 81, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases", "no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1141, "days_push": 709, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 28, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}