📅  最后修改于: 2023-12-03 14:49:46.402000             🧑  作者: Mango
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 文件非常简单,只需要在命令行中运行以下命令:
$ 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 文件也非常简单,只需要在 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 文件,并定义了字段名 name
、language
和 stars
。接着,我们使用 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 爬虫常用的方法之一,通过这两种文件,我们可以轻松地对爬取到的数据进行处理和分析。