Scrapy笔记(一)
一、常用指令
(1)创建新项目:scrapy startproject spider_name
(2)检查项目:scrapy check spiders.py
(3)启动项目:scrapy crawl spiders.py
(4)查看当前项目内有多少爬虫:scrapy list
(5)在当前项目中创建spider:scrapy genspider name site.com
name为文件名;site.com为要爬取的网站的域名
有两种情况:1、在工程中产生一个spider
2、在同一个工程产生多个spider,不同的spider要求name不同
二、保存数据
yield生成器避免了把item全部传给items造成占用大量内存的问题
item pipeline
当item在Spider中被收集之后,它将会被传递倒item Pipeline,这些item Pipeline组件按定义的顺序处理item
每个Item Pipeline都是实现了简单方法的Python类,比如决定此item是丢弃而存储。以下是item pipeline一些典型应用
- 验证爬取的数据(检查item包含某些字段,比如说name字段)
- 查重(并丢弃)
- 将爬取结果保存到文件或者数据库中
编写item pipeline
编写item pipeline很简单,item pipiline组件是一个独立的Python类,其中process_item()方法必须实现:
# Define your item pipelines here # # Don't forget to add your pipeline to the ITEM_PIPELINES setting # See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html # useful for handling different item types with a single interface import json from itemadapter import ItemAdapter class ScrapyStudyPipeline: def __init__(self): self.f = open('baidu_pipelin.json','w') #可选择实习,做参数初始化等 def process_item(self, item, spider): #item(Item对象) - 被爬取的item #spider(Spider对象) - 爬取该item的spider #这个方法必须实现,每个item pipeline组件都需要调用该方法 #该方法必须返回一个Item对象,被丢弃的item将不会被之后的pipline组件所处理 # content = json.dumps(dict(item),ensure_ascii=False) # self.f.write(content.encode("utf-8")) return item def close_spider(self,spider): self.f.close() #spider(Spider 对象) -被关闭的spider #可选实现,当spider被关闭时,这个方法被调用