📜  使用 Scrapy 将抓取的项目保存到 JSON 和 CSV 文件(1)

📅  最后修改于: 2023-12-03 14:49:46.402000             🧑  作者: Mango

使用 Scrapy 将抓取的项目保存到 JSON 和 CSV 文件

Scrapy 是一个用 Python 写的爬虫框架,它可以很方便地抓取网页、解析网页内容,并将结果保存到各种格式的文件中。其中,JSON 和 CSV 是最常用的两种文件格式。本文将介绍如何使用 Scrapy 将抓取的项目保存到这两种文件中。

抓取网页

首先,我们需要使用 Scrapy 的 spider 来抓取网页。在 Spider 中,我们需要定义一些必要的属性,例如 name、start_urls、parse 等。下面是一个简单的 Spider,它可以抓取 GitHub 上的 Python 项目:

import scrapy

class GitHubSpider(scrapy.Spider):
    name = 'github'
    start_urls = ['https://github.com/search?q=python']

    def parse(self, response):
        projects = response.css('li.repo-list-item')
        for project in projects:
            yield {
                'name': project.css('h3 a::text').get(),
                'language': project.css('span[itemprop="programmingLanguage"]::text').get(),
                'stars': project.css('a[href$="/stargazers"]::text').get()
            }

上面的代码中,我们定义了一个名为 GitHubSpider 的 Spider。它初始的 URL 是 https://github.com/search?q=python,表示搜索 Python 项目。在 parse() 函数中,我们使用 CSS Selector 选取网页中的项目并返回一个字典,包括项目的名字、编程语言和星级。

保存到 JSON 文件

保存到 JSON 文件非常简单,只需要在命令行中运行以下命令:

$ scrapy crawl github -o projects.json

其中 -o 选项是输出文件的路径,这里我们将结果保存到 projects.json 文件中。运行命令后,Scrapy 会自动将结果序列化成 JSON 格式,保存到文件中。以下是保存的 JSON 示例:

[
    {
        "name": "python-docs-zh-cn",
        "language": "Python",
        "stars": "2,376"
    },
    {
        "name": "neovim",
        "language": "Vim script",
        "stars": "56,838"
    },
    ...
]
保存到 CSV 文件

保存到 CSV 文件也非常简单,只需要在 Spider 中加入下面的代码:

import csv

class GitHubSpider(scrapy.Spider):
    ...
    def parse(self, response):
        ...
        with open('projects.csv', 'w', newline='') as csvfile:
            fieldnames = ['name', 'language', 'stars']
            writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

            writer.writeheader()
            for project in projects:
                writer.writerow({
                    'name': project.css('h3 a::text').get(),
                    'language': project.css('span[itemprop="programmingLanguage"]::text').get(),
                    'stars': project.css('a[href$="/stargazers"]::text').get()
                })

在上面的代码中,我们首先打开一个新的 CSV 文件,并定义了字段名 namelanguagestars。接着,我们使用 csv.DictWriter 来写入数据行,这里使用的是字典格式。最后,我们将数据行写入 CSV 文件中。

运行 Spider 后,数据将会保存到 projects.csv 中。以下是保存的 CSV 示例:

name,language,stars
python-docs-zh-cn,Python,"2,376"
neovim,"Vim script","56,838"
...
总结

以上就是使用 Scrapy 将抓取的项目保存到 JSON 和 CSV 文件的方法。保存到 JSON 和 CSV 文件是 Scrapy 爬虫常用的方法之一,通过这两种文件,我们可以轻松地对爬取到的数据进行处理和分析。