scrapy 基礎

JJJhr發表於2024-07-05

Scrapy 是一個強大的 Python 網路爬蟲框架,專門設計用於快速開發和管理網路爬蟲程式。它提供了一套完整的工具集,使得爬取網站資料變得高效、靈活和可擴充套件。以下是 Scrapy 的基礎介紹和使用方法:

Scrapy 的基礎概念

  1. 專案(Project)

    • Scrapy 爬蟲程式的基本工作單位,包含配置檔案、爬蟲定義和其他需要的檔案。
  2. Spider(爬蟲)

    • 定義瞭如何爬取網站資訊的類。使用者可以自定義 Spider 類來實現特定網站的爬取邏輯。
  3. Selector

    • 用於在網頁文字中選擇特定元素的工具,支援 XPath 和 CSS 選擇器語法。
  4. Item

    • 定義了需要爬取的資料欄位,類似於資料模型。
  5. Pipeline

    • 用於處理爬取的資料,如資料清洗、驗證、儲存等操作。
  6. Downloader

    • 負責從網站下載頁面內容的元件。
  7. Middleware

    • 用於擴充套件 Scrapy 的功能,如設定 User-Agent、代理、錯誤處理等。

使用 Scrapy 建立和執行爬蟲

1. 安裝 Scrapy

首先,確保已安裝了 Python 和 pip,然後可以透過以下命令安裝 Scrapy:

pip install scrapy

2. 建立 Scrapy 專案

使用以下命令建立一個新的 Scrapy 專案:

scrapy startproject myproject

這將建立一個名為 myproject 的新目錄,包含以下檔案:

  • scrapy.cfg:專案配置檔案。
  • myproject/:專案主目錄,包含爬蟲定義、Item 定義、Pipeline 等。

3. 定義 Spider(爬蟲)

在 Scrapy 專案中,可以定義一個或多個 Spider 來爬取不同網站的資料。例如,建立一個名為 example_spider.py 的 Spider:

import scrapy

class ExampleSpider(scrapy.Spider):
    name = 'example'
    allowed_domains = ['example.com']
    start_urls = ['http://www.example.com']

    def parse(self, response):
        # 處理響應資料,提取需要的資訊
        title = response.xpath('//title/text()').get()
        yield {'title': title}

4. 執行 Spider

使用以下命令執行 Spider:

cd myproject
scrapy crawl example

其中,example 是 Spider 的名稱。

5. 資料處理和儲存

在 Scrapy 中,可以定義 Pipeline 來處理和儲存爬取的資料。例如,定義一個簡單的 Pipeline 類來列印 Item:

class PrintPipeline:
    def process_item(self, item, spider):
        print(item)
        return item

settings.py 中啟用 Pipeline:

ITEM_PIPELINES = {
    'myproject.pipelines.PrintPipeline': 300,
}

6. 資料選擇和提取

在 Spider 的 parse 方法中使用 Selector 從網頁中選擇和提取資料:

def parse(self, response):
    # 使用 XPath 提取資料
    titles = response.xpath('//h1/text()').getall()

    # 使用 CSS 選擇器提取資料
    paragraphs = response.css('p::text').getall()

    # 處理提取的資料並 yield Item
    for title in titles:
        yield {'title': title}

    for paragraph in paragraphs:
        yield {'paragraph': paragraph}

總結

Scrapy 提供了強大的工具和框架,使得開發和管理網頁爬蟲變得更加簡單和高效。透過定義 Spider、使用 Selector 提取資料、配置 Pipeline 等步驟,可以快速編寫出功能強大的爬蟲程式,並實現資料的高效爬取和處理。

相關文章