跳转至

scrapy 教程

Scrapy 使用教程

Scrapy 是一个强大的 Python 框架,用于从网站提取数据,即所谓的“爬取”。它非常适合处理大型项目和复杂的抓取任务。以下是一个详细的 Scrapy 使用教程,涵盖了从安装到实际项目开发的各个环节。

1. 安装 Scrapy

使用 pip 安装 Scrapy:

pip install scrapy

2. 创建 Scrapy 项目

要开始一个 Scrapy 项目,你需要创建一个项目目录:

scrapy startproject myproject
这将创建一个新的 Scrapy 项目,其中包含必要的文件和文件夹。

3. 定义 Item

在 Scrapy 中,Item 是用于保存爬取到的数据的容器。你可以在 items.py 文件中定义自己的 Item:

import scrapy

class MyprojectItem(scrapy.Item):
    title = scrapy.Field()
    link = scrapy.Field()
    description = scrapy.Field()

4. 编写爬虫(Spider)

Spider 是 Scrapy 的核心,它定义了如何爬取页面,以及从页面中提取哪些内容。Spider 可以在 spiders 目录中创建:

cd myproject/spiders
scrapy genspider example example.com
这将创建一个名为 example.py 的爬虫文件。

在爬虫文件中,你可以编写抓取逻辑:

import scrapy
from myproject.items import MyprojectItem

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

    def parse(self, response):
        item = MyprojectItem()
        item['title'] = response.xpath('//title/text()').get()
        item['link'] = response.url
        item['description'] = response.xpath('//meta[@name="description"]/@content').get()
        yield item

5. 运行爬虫

你可以通过以下命令来运行爬虫:

scrapy crawl example

6. 存储爬取的数据

Scrapy 提供了多种方式来存储数据,你可以将数据保存为 JSON、CSV 等格式:

scrapy crawl example -o output.json
这将把抓取到的数据保存到 output.json 文件中。

7. 中间件(Middleware)

Scrapy 允许你通过中间件修改请求和响应。例如,你可以在 middlewares.py 文件中编写一个中间件来设置代理:

class MyprojectSpiderMiddleware:
    def process_request(self, request, spider):
        request.meta['proxy'] = "http://your_proxy_server"

8. 扩展和调试

  • 调试:你可以使用 Scrapy 提供的 Shell 来调试爬虫:

    scrapy shell 'http://example.com'
    
    这将打开一个交互式的 Shell,让你可以直接对页面进行分析。

  • 扩展:Scrapy 支持多种扩展,比如设置下载延迟、使用 cookies、处理重定向等。你可以在 settings.py 中配置这些选项:

    DOWNLOAD_DELAY = 2
    COOKIES_ENABLED = False
    

9. 使用 Pipelines

Pipelines 用于处理和存储从 Spider 传递过来的数据。你可以在 pipelines.py 文件中定义你的 Pipeline:

class MyprojectPipeline:
    def process_item(self, item, spider):
        # 对 item 进行处理或存储
        return item
别忘了在 settings.py 中启用你的 Pipeline:
ITEM_PIPELINES = {
    'myproject.pipelines.MyprojectPipeline': 300,
}

10. 部署和扩展

当你准备将爬虫部署到生产环境时,可以考虑使用 Scrapy 提供的 scrapyd 服务来管理和调度你的爬虫。此外,你还可以使用 Scrapy Cloud 等服务来进行更大规模的分布式抓取。

通过以上步骤,你就可以用 Scrapy 构建一个功能强大的爬虫项目。如果你有任何疑问或需要更深入的指导,随时可以提问。