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被关闭时,这个方法被调用

 

posted @ 2020-12-11 10:32  Eliphaz  阅读(97)  评论(0编辑  收藏  举报