
Scrapling 爬蟲全流程指南從一條請求到整站抓取【免費下載鏈接】Scrapling? An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!項目地址: https://gitcode.com/GitHub_Trending/sc/ScraplingScrapling 是一個自適應 Web 爬蟲框架把從一條 HTTP 請求到整站并發抓取的全流程收進了一個庫里。本文用 4 個遞進的真實場景帶你走完它的安裝、選 fetcher、抗改版、斷點續爬每一步代碼都能直接復制運行。主線很簡單每當你爬到下一個階段就遇到一個新問題然后我們只解決那一個問題。3 條命令裝好并拿到第一頁內容大多數爬蟲庫裝完就能用Scrapling 稍微特別一點基礎安裝只包含解析引擎不裝 fetcher 依賴的話import scrapling.fetchers會直接報ModuleNotFoundError。所以按下面這個順序來pip install scrapling[fetchers] # 裝庫和 fetcher 依賴需 Python 3.10 scrapling install # 下載瀏覽器及指紋模擬所需的系統依賴裝完后跑這段最小爬蟲向練習網站 quotes.toscrape.com 發一條普通 HTTP 請求from scrapling.fetchers import Fetcher page Fetcher.get(https://quotes.toscrape.com/) quotes page.css(.quote .text::text).getall() print(len(quotes), 條引言) print(quotes[0])跑出來應該看到10 條引言接著打印出第一條名言。注意page本身就能用.css()查元素不用額外建解析器——返回的Response對象自帶查詢能力還能通過page.status、page.headers、page.cookies看響應細節。?術語解析TLS 指紋網站能根據你握手時的 TLS 特征判斷你是不是瀏覽器。Fetcher.get(url, impersonatechrome)會讓請求偽裝成最新版 Chrome 的 TLS 指紋和頭部比手動改 User-Agent 隱蔽得多。普通 HTTP 請求能拿到的頁面就到這里為止。下一頁內容如果是 JavaScript 渲染出來的你拿到的就只剩一個空殼 DOM 了。頁面內容不在源碼里按場景選對 fetcher實際跑起來你會發現三種 fetcher 是三個不同檔位的工具官方文檔里有一張對比表結論可以壓縮成一句話能用 HTTP 就別開瀏覽器瀏覽器里優先用輕的。Fetcher純 HTTP最快適合靜態頁面DynamicFetcher開一個真實 Chromium/Chrome 渲染 JS適合動態加載和中小防護StealthyFetcher在動態渲染之上疊加指紋偽裝能自動過 Cloudflare 的 Turnstile 和 Interstitial 挑戰內容靠 JS 渲染的頁面把上一條請求換成下面這樣即可from scrapling.fetchers import DynamicFetcher page DynamicFetcher.fetch(https://quotes.toscrape.com/, network_idleTrue) data page.css(.quote .text::text).getall() print(len(data), 條引言瀏覽器渲染后)network_idleTrue讓 fetcher 等到頁面 500ms 內沒有網絡請求再返回避免抓到 JS 還沒執行完的中間狀態。跑出來應該同樣看到 10 條引言但這次 DOM 是瀏覽器真實執行后的產物。遇到帶 Cloudflare 防護的站點換StealthyFetcher并顯式打開挑戰求解詳細機制見反檢測文檔from scrapling.fetchers import StealthyFetcher page StealthyFetcher.fetch(https://nopecha.com/demo/cloudflare, solve_cloudflareTrue) data page.css(#padded_content a).getall() print(len(data), 個鏈接穿過了 Cloudflare 挑戰)?術語解析Headless 模式Headless 指不帶圖形界面的無頭瀏覽器運行模式。兩個瀏覽器 fetcher 默認都是headlessTrue調試時傳headlessFalse就能看到瀏覽器窗口方便觀察頁面實際加載過程。網站改版了讓選擇器自己找到原來的元素這是 Scrapling 最有辨識度的一點。傳統做法是頁面 DOM 一變你寫死的#p1或div.product選擇器就失效爬蟲直接靜默返回空結果。Scrapling 的 adaptive自適應功能會記住元素的屬性下次找不到時按相似度把元素搬回來重新定位不依賴 AI。先在全局開啟這個開關并保存一次元素屬性from scrapling.fetchers import Fetcher Fetcher.adaptive True # 默認是關閉的必須顯式開啟 page Fetcher.get(https://quotes.toscrape.com/) element page.css(.quote, auto_saveTrue) # auto_saveTrue 記錄元素指紋之后某天網站改版選擇器查不到東西時別慌用adaptiveTrue讓它按相似度重新找element page.css(#p1, adaptiveTrue) # 舊選擇器失效后照樣找到那個元素文檔里有個很能說明問題的實測用 2010 年 StackOverflow 頁面上生成的超具體選擇器去今天的 StackOverflow 上定位同一個按鈕adaptive 模式依然能找到見adaptive 文檔。也就是說你第一次保存得越認真后面改版時它認路就越準。整站抓取寫一個可暫停可續跑的 Spider單頁腳本扛不住多頁、并發和中斷恢復。Scrapling 的 Spider 走的是 Scrapy 風格定義start_urls在異步parse()里yield結果或后續請求內部引擎自己管事件循環、調度器、會話池和斷點存檔Spider 提交初始請求Crawler Engine 調度會話抓取并把結果存盤隨時可從 checkpoint 恢復下面這個 Spider 抓取 quotes.toscrape.com 的全部 10 頁from scrapling.spiders import Spider, Response class QuotesSpider(Spider): name quotes start_urls [https://quotes.toscrape.com] async def parse(self, response: Response): for quote in response.css(div.quote): yield { text: quote.css(span.text::text).get(), author: quote.css(small.author::text).get(), } next_page response.css(li.next a::attr(href)).get() if next_page: yield response.follow(next_page, callbackself.parse) result QuotesSpider().start() result.items.to_json(quotes.json) print(f共抓取 {result.stats.items_scraped} 條耗時 {result.stats.elapsed_seconds:.1f}s)跑完終端會打印詳細的抓取統計當前目錄多出quotes.json里面是 100 條引言。response.follow()會自動處理相對路徑并帶上 Referer不用自己拼 URL。?術語解析Checkpoint檢查點Spider 運行時會把已完成的進度定期存到磁盤。給start()傳一個目錄即可開啟QuotesSpider(crawldir./crawl_data).start()。運行中按 CtrlC 優雅暫停之后用同一個crawldir再啟動它會從上次停下的位置繼續適合長時間大站爬取。規模上去后被封是遲早的事內置的ProxyRotator讓每個請求自動輪換出口 IP代理與封禁處理文檔from scrapling.spiders import Spider, Response from scrapling.fetchers import FetcherSession, ProxyRotator class MySpider(Spider): name my_spider start_urls [https://example.com] def configure_sessions(self, manager): rotator ProxyRotator([http://proxy1:8080, http://proxy2:8080]) manager.add(default, FetcherSession(proxy_rotatorrotator)) async def parse(self, response: Response): yield {proxy: response.meta.get(proxy), title: response.css(title::text).get()}每個請求自動取輪換隊列里的下一個代理實際用了哪個記在response.meta[proxy]里方便你追查是哪個 IP 抓到了哪頁。常見坑與下一步把前面幾個場景串起來用過之后最容易踩的坑其實是這些導入即報錯只跑了pip install scrapling就會在from scrapling.fetchers import ...處報ModuleNotFoundError。必須帶[fetchers]安裝再執行scrapling install。adaptive 默認關閉不顯式Fetcher.adaptive True第一次就不會保存元素指紋后面想用也白用。想不起選擇器就開 shellscrapling shell能進交互式爬蟲 shell把瀏覽器請求轉成 Scrapling 請求、在本地瀏覽器里預覽結果省去來回復制粘貼。開發期最常用的姿勢瀏覽器里 Copy as cURL扔進 shell 里直接改造成 fetcher 調用最后提醒一句合規Scrapling 的免責聲明里寫明使用前請遵守目標網站的服務條款、robots.txt 和當地數據法規Spider 也內置了robots_txt_obey選項來遵守 robots 指令。下一步行動用第一節的 3 條命令裝好環境拿你自己的目標站點把四個場景各跑一遍卡在哪一步再翻對應文檔官方文檔首頁fetcher 選擇、spider、CLI 的完整說明API 參考每個類的參數一覽Spider 入門文檔多會話、模板 SpiderCrawlSpider/SitemapSpider/ShopifySpider等進階內容【免費下載鏈接】Scrapling? An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!項目地址: https://gitcode.com/GitHub_Trending/sc/Scrapling創作聲明:本文部分內容由AI輔助生成(AIGC),僅供參考