接着昨天的学习哈
保存到文件
Scrapy提供的 Feed Exports 可以轻松将抓取结果输出。
scrapy crawl quotes -o quotes.json
命令运行后,项目内多了一个quotes.json 文件,文件包含了刚才抓取的所有内容,内容是JSON格式。
另外我们还可以让每一个 Item 输出一行 JSON,输出后级为jl,为 jsonline 的缩写,命令如下
scrapy crawl quotes -o quotes.jl
或者
scrapy crawl quotes -o quotes.jsonlines
Feed Exports 支持从输出格式还有很多,例如 csV、xml、pickle、marshal 等,同时它支持 印p、s3等运理拾出,另外还可以通过自定义ItemExporter 来实现其他的输出。
例如,下面命令对应的输出分别为 csv、xml、pickle、marshal格式以及 印p远程输出:
scrapy crawl quotes -o quotes.csv
scrapy crawl quotes -o quotes.xml
Scrapy crawl quotes -o quotes.pickle
scrapy crawl quotes -o quotes.marshal
scrapy crawl quotes -o ftp://user:passeftp.example.com/ path/to/quotes.csv
其中,ftp输出需要正确配置用户名、密码、地址、输出路径,否则会报错。
通过 Scrapy 提供的 Feed Exports,我们可以轻松地将抓取结果到输出到文件中。对于一些小型项目来说,这应该足够了。
ltem Pipeline
如果想进行更复杂的操作,如将结果保存到 MomgoDB 数据库中或者饰选菜些有用的 lom,那么我们可以定义 Item Pipeline 来实现。
Item Pipeline 为项目管道。当 Item 生成后,它会自动被送到 Item Pipeline 处进行处理我们可以月Item Pipeline 来做如下操作:
- 清洗 HTNL数据;
- 验证爬取数据,检查爬取字段
- 查重并丢弃重复内容;
- 将爬取结果保存到数据库
要实现 Item Pipeline 很简单,只需要定义一个类并实现 process_ item方法即可。启用Item Pipeline后,ltem Pipeline 会自动调用这个方法。process_ item 方法必须返回包含数据的字典或 Item 对象,或者抛出 Dropltem 异常。
process_ item方法有两个参數。一个参数是item,每次Spider 生成的 item都会作为参数传递过来。另一个参数是 spider,就是 Spider的实例。
接下来我们来实现,筛掉标签大于两个的Item,打印输出到控制台,(正常是可以保存到数据库的,不过为了简单就直接打印输出了)
from itemadapter import ItemAdapter
from scrapy.exceptions import DropItem
class NewProjectPipeline:
def process_item(self, item, spider):
if len(item['tags']) > 2:
return item
else:
return DropItem('tags <= 2')
记得要再设置中将其注册
然后我们运行爬虫,将其结果存到接送文件中
scrapy crawl quotes -o quotes_tags.jsonlines
可以看见写入文件的结tags的长度都是>=2的。
再ltem Pipeline中还有几个常用到的方法:
- from crawler:一个类方法,用@classmethod标识,这个方法是以依赖注人的方式实现的,方法的参数就是crawler。通过crawler,我们能拿到全局配置的每个配置信息。
- 当Spider 被开启时,这个方法被调用,主要进行了一些初始化操作。比如打开数据连接或者打开excel,这个后面会讲到
- 当Spider 被关闭时,这个方法被调用,比如将数据库连接关闭,写入excel等
今天就到这里,主要是根据这个网站了解一下scrapy框架的流程以及一些简单的配置,明天继续!