目录
ScrapyShell
启动ScrapyShell
基本方法
注意
保存数据到文件
方法一
使用python原生方式保存
方法二
使用Scrapy内置方式
方法三
Item Pipeline的使用
功能
ScrapyShell
ScrapyShell是Scrapy框架提供的一个交互式的开发工具,用于调试和测试爬虫(可以在不运行spider项目时,快速调试 scrapy 代码。)。它提供了一个类似Python交互式解释器的环境,在这个环境中,可以实时执行Scrapy的命令和代码,并查看抓取到的数据和网页的解析结果。ScrapyShell是一个强大的工具,可以快速验证和调整爬虫的逻辑,以及检查和提取目标网站的数据。
一般用于测试xpath或css表达式,查看它们是否能提取想要的数据
启动ScrapyShell
- 打开命令行终端或命令提示符窗口。
win+r 输入cmd
- 导航到您的Scrapy项目的根目录。
cd 根目录
- 运行以下命令:
scrapy shell
这就成功启动ScrapyShell,将自动加载你的Scrapy项目的配置和代码。
基本方法
- 使用
fetch(url)
命令来下载指定URL的网页并查看其内容。 - 使用
response
变量来访问最近下载的网页的响应对象,您可以查看它的状态码、头部信息等。 - 使用
view(response)
命令来在浏览器中打开最近下载的网页,以便更方便地查看其结构和样式。 - 使用
sel = Selector(response)
命令来创建一个Scrapy选择器对象,您可以使用该对象来提取网页中的数据。 - 使用
sel.xpath()
或sel.css()
方法来编写XPath或CSS选择器来定位和提取特定元素或数据。 - 使用Python代码编写自定义的数据提取逻辑,并使用Scrapy提供的各种工具和方法来处理和保存数据。
注意
当从命令行运行Scrapy Shell时,记住总是用引号括住url,否则url包含参数(即 &
字符)不起作用。
在Windows上,使用双引号:
scrapy shell "https://scrapy.org"
保存数据到文件
想要保存数据到文件中,这里我们讲三种方法:
方法一
使用python原生方式保存
这是python原始的保存数据的方法。
with open("movie.txt", 'wb') as f:
for n, c in zip(movie_name, movie_core):
str = n+":"+c+"\n"
f.write(str.encode())
方法二
使用Scrapy内置方式
scrapy 内置主要有四种:JSON,JSON lines,CSV,XML
最常用的导出结果格为JSON,命令如下:
scrapy crawl dmoz -o douban.json -t json
参数设置:
-
-o 后面导出文件名
-
-t 后面导出的类型
可以省略,但要保存的文件名后缀,写清楚类型
将数据解析完,返回数据,才可以用命令保存,代码如下,格式为dict或item类型
- return data
- yield data
方法三
Item Pipeline的使用
当数据在Spider中被收集之后,可以传递到Item Pipeline中统一进行处理
- 在Scrapy项目中的
pipelines.py
文件中定义一个自定义的管道类,该类需要继承scrapy.pipelines.Pipeline
。 - 在管道类中实现
process_item
方法,该方法会在每个数据项(Item)被爬虫处理时被调用。 - 在
process_item
方法中,您可以将数据写入文件,可以使用内置的Python文件操作函数(如open()
和write()
)或其他第三方库来实现数据的写入。
每个item pipeline就是一个普通的python类,包含的方法名如下:
方法名 | 含义 | 是否必须实现 |
---|---|---|
process_item(self,item,spider) | 用于处理接收到的item | 是 |
open_spider(self,spider) | 表示当spider被开启的时候调用这个方法 | 否 |
close_spider(self,spider) | 当spider关闭时候这个方法被调用 | 否 |
功能
接收item
在
process_item
方法中保存是否要保存数据
取决于是否编写代码用于保存数据
决定此Item是否进入下一个pipeline
- return item 数据进入下一个pipeline
- drop item 抛弃数据
示例
# pipelines.py
class MyPipeline(object):
def __init__(self):
self.file = open('data.txt', 'w') # 打开文件以写入数据
def process_item(self, item, spider):
data = item['data'] # 假设数据项中的键为'data'
self.file.write(data + '\n') # 写入数据到文件
return item
def close_spider(self, spider):
self.file.close() # 关闭文件
要启用这个自定义的管道,您需要在Scrapy项目的设置文件(settings.py
)中进行配置:
# settings.py
ITEM_PIPELINES = {
'yourproject.pipelines.MyPipeline': 300, # 将自定义管道添加到管道设置中
}
在上面的配置中,300
表示管道的优先级,数字越小表示优先级越高。