前言
Scrap是Python中最流行的爬虫框架之一,它提供了一套基于Twisted的异步网络框架,可以帮助开发者快速、高效地爬取网站数据。本文将介绍Scrapy的基本框架,包括如何创建Scrapy项目、如何编写爬虫、如何处理数据等。
目录
一、创建Scrapy项目
1.安装Scrapy
在开始之前,需要在python中先安装Scrapy。可以使用pip命令进行安装:
pip install scrapy
-
2.创建Scrapy项目
使用Scrapy创建一个新的项目,可以使用以下命令:
首先打开cmd命令行,cd到你要创建项目的文件夹后输入下面的scrapy项目创建命令:
scrapy startproject project_name
project_name是你创建的项目文件夹名称,可以自行修改
创建之后,比如demo是我的项目名称,我们打开项目,可以看到执行完该命令后,会在当前目录下创建一个名为demo的文件夹,其中包括如下文件:
二、编写爬虫
1.创建Spider
在Scrapy中,爬虫是通过Spider类来实现的。我们需要创建一个Spider类,并定义一些属性和方法来指定爬取的网站和处理数据的方式。以下是一个简单的Spider类的示例:
在创建完项目后,我们要从cmd进入到项目的spider目录,
进入路径后输入创建爬虫文件的命令:
scrapy genspider spidername www.xxx.com
spidername是你的爬虫文件的名称,www.xxx.com则是你在爬虫文件中需要爬取的url,你可以在这条命令中输入,也可以在创建爬虫后进入文件中修改
在这个例子中,我们创建了一个名为myspider的Spider类,指定了allowed_domains和start_urls属性。allowed_domains用于指定允许爬取的域名,start_urls用于指定爬虫开始爬取的URL。parse方法用于处理网页数据。
1.配置Item文件
在Scrapy中,Item是用于存储爬取到的数据的容器对象。它相当于一个Python字典(dictionary),其中包含了我们从HTML页面中提取的数据。通过定义Item,我们可以规定需要获取的数据字段名称以及对应的数据类型,从而方便后续处理和存储数据。下面简单讲解Scrapy中Item文件如何使用。
我们已经在项目中创建了一个名为items.py
的文件,用于存放定义的Item类。例如,我们要爬取一个电影网站的电影信息,可以定义以下Item:
import scrapy
class MovieItem(scrapy.Item):
title = scrapy.Field()
genre = scrapy.Field()
release_date = scrapy.Field()
rating = scrapy.Field()
在上述代码中,我们定义了一个名为MovieItem
的Item类,并设置了四个字段:title
、genre
、release_date
和rating
。这些字段将用于存储我们从HTML页面中提取的电影信息。
2.爬取所需网页信息
在Spider类中,我们可以使用XPath或CSS选择器来解析网页数据。例如,我们可以在parse
方法中提取电影信息,并将其存储到一个MovieItem
对象中:
def parse(self, response):
sel = Selector(response)
title = sel.xpath("//h1/text()").get()
genre = sel.xpath("//div[@class='genre']/text()").get()
release_date = sel.xpath("//span[@class='release-date']/text()").get()
rating = sel.xpath("//span[@class='rating']/text()").get()
# 创建MovieItem对象并存储数据
item = MovieItem()
item['title'] = title
item['genre'] = genre
item['release_date'] = release_date
item['rating'] = rating
yield item
在上述代码中,我们创建了一个名为item
的MovieItem
对象,并使用字典形式将提取到的电影信息存储到对应的字段中。最后,我们使用yield
语句将该item
对象返回给Scrapy框架,以便进行后续处理。
三、处理数据
1.存储数据
数据处理和存储通过使用Item,我们可以方便地进行数据处理和存储。例如,我们可以使用管道(Pipeline)机制来处理和存储爬取到的数据。在项目文件夹的pipelines.py
文件中,Item Pipeline是一组按顺序执行的操作,用于处理从Spider中提取的数据。以下是对上述代码的信息储存和Item Pipeline的示例:
class TxtPipeline:
def open_spider(self, spider):
self.file = open('data.txt', 'w', encoding='utf-8')
def close_spider(self, spider):
self.file.close()
def process_item(self, item, spider):
line = f"Title: {item['title']}\nGenre: {item['genre']}\nRelease Date: {item['release_date']}\nRating: {item['rating']}\n\n"
self.file.write(line)
return item
在上述代码中,我们定义了一个名为TxtPipeline
的Pipeline类。其中,open_spider
方法在爬虫启动时执行,用于打开文件;close_spider
方法在爬虫结束时执行,用于关闭文件;process_item
方法用于处理每个Item对象。在process_item
方法中,我们将提取到的数据以特定格式写入到txt文件中。
2.在setting文件中配置Item Pipeline
要启用Item Pipeline,我们需要在settings.py文件中进行配置。首先你需要到setting文件中启用Pipeline管道,因为Pipeline在setting中是默认为关闭状态,你需要去找到启用代码把注释取消:
ITEM_PIPELINES = { 'project_name.pipelines.MyPipeline': 300, }
我们将MyPipeline类添加到ITEM_PIPELINES字典中,并指定了优先级为300。你可以通过修改优先级的大小来决定在接收scrapy框架返回的item信息顺序。
然后添加FEED_FORMAT
和FEED_URI
配置项,用于指定输出文件的格式和路径,我们将输出文件的格式设置为txt,输出文件的路径为output.txt
。你可以根据需要修改文件名和路径:
FEED_FORMAT = 'txt'
FEED_URI = 'output.txt'
四、运行爬虫
运行Spider
要运行Spider,我们需要在cmd中使用以下命令来执行编写的代码:
scrapy crawl spider_name
其中,spider_name是你的Spider类的名称。
通过以上步骤,你就可以将爬取到的信息存储为txt文件了。每次爬取时都会生成一个新的txt文件,并按照指定的格式保存爬取到的电影信息。
总结
本文介绍了Scrapy的基本框架,包括如何创建Scrapy项目、如何编写爬虫、如何处理数据等。Scrapy是一个非常强大的爬虫框架,可以帮助开发者快速、高效地爬取网站数据。如果你对爬虫感兴趣,不妨尝试一下Scrapy。