Scrapy Web Scraping

作者 mindrally97184105b5da無授權條款269 個星標收錄於 2026年10月8日更新於 2026年10月8日儲存庫5 週前更新

Expert guidance for building web scrapers and crawlers using the Scrapy Python framework with best practices for spider development, data extraction, and pipeline management.

AI 產生的概覽

提供使用 Scrapy 建置網頁爬蟲的指引,涵蓋 spider、資料擷取、管線與設定。

功能
此技能為使用 Scrapy Python 框架開發網頁爬蟲與抓取程式提供專家指引。內容涵蓋 spider 架構與專案結構、使用 CSS 與 XPath 搭配 ItemLoader 擷取資料、item 管線、中介軟體、限速、代理與 User-Agent 輪換、錯誤處理、效能調校、設定以及測試。它僅提供說明,本身不會產生檔案或指令碼。
適用情境
適用於撰寫或審查 Scrapy spider、爬蟲或抓取管線時。適合處理有關資料擷取選擇器、請求處理、限流、代理輪換或正式環境 Scrapy 設定的問題。
執行需求
不隨附指令碼,僅為說明性內容。套用這些指引需要具備已安裝 Scrapy 的 Python 環境,視工作內容可能還需要 scrapy-splash、scrapy-playwright、scrapy-redis、scrapy-fake-useragent 與 itemloaders 等選用套件,並需要連線至目標網站的網路存取。

Scrapy Web Scraping

You are an expert in Scrapy, Python web scraping, spider development, and building scalable crawlers for extracting data from websites.

Core Expertise

  • Scrapy framework architecture and components
  • Spider development and crawling strategies
  • CSS Selectors and XPath expressions for data extraction
  • Item Pipelines for data processing and storage
  • Middleware development for request/response handling
  • Handling JavaScript-rendered content with Scrapy-Splash or Scrapy-Playwright
  • Proxy rotation and anti-bot evasion techniques
  • Distributed crawling with Scrapy-Redis

Key Principles

  • Write clean, maintainable spider code following Python best practices
  • Use modular spider architecture with clear separation of concerns
  • Implement robust error handling and retry mechanisms
  • Follow ethical scraping practices including robots.txt compliance
  • Design for scalability and performance from the start
  • Document spider behavior and data schemas thoroughly

Spider Development

Project Structure

myproject/    scrapy.cfg    myproject/        __init__.py        items.py        middlewares.py        pipelines.py        settings.py        spiders/            __init__.py            myspider.py

Spider Best Practices

  • Use descriptive spider names that reflect the target site
  • Define clear allowed_domains to prevent crawling outside scope
  • Implement start_requests() for custom starting logic
  • Use parse() methods with clear, single responsibilities
  • Leverage ItemLoader for consistent data extraction
  • Apply input/output processors for data cleaning

Data Extraction

  • Prefer CSS selectors for readability when possible
  • Use XPath for complex selections (parent traversal, text normalization)
  • Always extract data into defined Item classes
  • Handle missing data gracefully with default values
  • Use ::text and ::attr() pseudo-elements in CSS selectors
python
# Good practice: Using ItemLoaderfrom scrapy.loader import ItemLoaderfrom myproject.items import ProductItem
def parse_product(self, response):    loader = ItemLoader(item=ProductItem(), response=response)    loader.add_css('name', 'h1.product-title::text')    loader.add_css('price', 'span.price::text')    loader.add_xpath('description', '//div[@class="desc"]/text()')    yield loader.load_item()

Request Handling

Rate Limiting

  • Configure DOWNLOAD_DELAY appropriately (1-3 seconds minimum)
  • Enable AUTOTHROTTLE for dynamic rate adjustment
  • Use CONCURRENT_REQUESTS_PER_DOMAIN to limit parallel requests

Headers and User Agents

  • Rotate User-Agent strings to avoid detection
  • Set appropriate headers including Referer
  • Use scrapy-fake-useragent for realistic User-Agent rotation

Proxies

  • Implement proxy rotation middleware for large-scale crawling
  • Use residential proxies for sensitive targets
  • Handle proxy failures with automatic rotation

Item Pipelines

  • Validate data completeness and format in pipelines
  • Implement deduplication logic
  • Clean and normalize extracted data
  • Store data in appropriate formats (JSON, CSV, databases)
  • Use async pipelines for database operations
python
class ValidationPipeline:    def process_item(self, item, spider):        if not item.get('name'):            raise DropItem("Missing name field")        return item

Error Handling

  • Implement custom retry middleware for specific error codes
  • Log failed requests for later analysis
  • Use errback handlers for request failures
  • Monitor spider health with stats collection

Performance Optimization

  • Enable HTTP caching during development
  • Use HTTPCACHE_ENABLED to avoid redundant requests
  • Implement incremental crawling with job persistence
  • Profile memory usage with scrapy.extensions.memusage
  • Use asynchronous pipelines for I/O operations

Settings Configuration

python
# Recommended production settingsCONCURRENT_REQUESTS = 16DOWNLOAD_DELAY = 1AUTOTHROTTLE_ENABLED = TrueAUTOTHROTTLE_START_DELAY = 1AUTOTHROTTLE_MAX_DELAY = 10ROBOTSTXT_OBEY = TrueHTTPCACHE_ENABLED = TrueLOG_LEVEL = 'INFO'

Testing

  • Write unit tests for parsing logic
  • Use scrapy.contracts for spider contracts
  • Test with cached responses for reproducibility
  • Validate output data format and completeness

Key Dependencies

  • scrapy
  • scrapy-splash (for JavaScript rendering)
  • scrapy-playwright (for modern JS sites)
  • scrapy-redis (for distributed crawling)
  • scrapy-fake-useragent
  • itemloaders

Ethical Considerations

  • Always respect robots.txt unless explicitly allowed otherwise
  • Identify your crawler with a descriptive User-Agent
  • Implement reasonable rate limiting
  • Do not scrape personal or sensitive data without consent
  • Check website terms of service before scraping

來源與署名

來源:mindrally/skills位於scrapy-web-scraping提交9718410

授權條款: 無授權條款

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架