跳转至

scrapy 教程

Scrapy 使用教程

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

1. 安装 Scrapy

使用 pip 安装 Scrapy: bash pip install scrapy

2. 创建 Scrapy 项目

要开始一个 Scrapy 项目,你需要创建一个项目目录: bash scrapy startproject myproject 这将创建一个新的 Scrapy 项目,其中包含必要的文件和文件夹。

3. 定义 Item

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

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

4. 编写爬虫(Spider)

Spider 是 Scrapy 的核心,它定义了如何爬取页面,以及从页面中提取哪些内容。Spider 可以在 spiders 目录中创建: bash cd myproject/spiders scrapy genspider example example.com 这将创建一个名为 example.py 的爬虫文件。

在爬虫文件中,你可以编写抓取逻辑: ```python 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. 运行爬虫

你可以通过以下命令来运行爬虫: bash scrapy crawl example

6. 存储爬取的数据

Scrapy 提供了多种方式来存储数据,你可以将数据保存为 JSON、CSV 等格式: bash scrapy crawl example -o output.json 这将把抓取到的数据保存到 output.json 文件中。

7. 中间件(Middleware)

Scrapy 允许你通过中间件修改请求和响应。例如,你可以在 middlewares.py 文件中编写一个中间件来设置代理: python class MyprojectSpiderMiddleware: def process_request(self, request, spider): request.meta['proxy'] = "http://your_proxy_server"

8. 扩展和调试

  • 调试:你可以使用 Scrapy 提供的 Shell 来调试爬虫: bash scrapy shell 'http://example.com' 这将打开一个交互式的 Shell,让你可以直接对页面进行分析。

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

9. 使用 Pipelines

Pipelines 用于处理和存储从 Spider 传递过来的数据。你可以在 pipelines.py 文件中定义你的 Pipeline: python class MyprojectPipeline: def process_item(self, item, spider): # 对 item 进行处理或存储 return item 别忘了在 settings.py 中启用你的 Pipeline: python ITEM_PIPELINES = { 'myproject.pipelines.MyprojectPipeline': 300, }

10. 部署和扩展

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

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