前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于scrapy中如何区分是接着发起请求还是开始保存文件

关于scrapy中如何区分是接着发起请求还是开始保存文件

作者头像
小小咸鱼YwY
发布2020-06-19 15:43:52
5840
发布2020-06-19 15:43:52
举报
文章被收录于专栏:python-爬虫python-爬虫

一.区分

根据yield迭代器生成的对象是request对象还是item对象

二.item

1.配置tem对象

items.py文件中设置类

代码语言:javascript
复制
class MyscrapyItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    title = scrapy.Field()
    price = scrapy.Field()
    prostatus = scrapy.Field()

2.在爬虫程序中导入该类写相应的函数

代码语言:javascript
复制
from myscrapy.items import MyscrapyItem
def get_info(self,response):
    elements_list = response.css('.product')
    for element in elements_list:
        title = element.css('.productTitle a::attr(title)').extract_first() #这是css选择器
        price = element.css('.productPrice em::attr(title)').extract_first()
        prostatus = element.css('.productStatus em::text').extract_first()
        item = MyscrapyItem()  #实例话一个item对象
        item['title'] = title  #填写配置的参数
        item['price'] = price
        item['prostatus'] = prostatus
        yield item

三.再获得item参数后scrapy会自动执行pipelines.py文件中内容

1.settings文件进行注册

代码语言:javascript
复制
ITEM_PIPELINES = {
   'myscrapy.pipelines.MyscrapyPipeline': 300,   #小的优先级高
   # 'myscrapy.pipelines.MyscrapyPipeline1': 500,
}
#和中间件一个道理

2.配置MyscrapyPipeline方法

代码语言:javascript
复制
#其中两个方法非常常用
#def open_spider(self): 运行这个函数开始执行,一般都是连接数据库用
#def close_spider(self): 运行完这个函数执行,一般都是关闭数据库用

#简单拿MongoDB举例
from pymongo import MongoClient

class MyscrapyPipeline(object):

    def __init__(self,HOST,PORT,USER,PWD,DB,TABLE):
        self.HOST = HOST
        self.PORT = PORT
        self.USER = USER
        self.PWD = PWD
        self.DB = DB
        self.TABLE = TABLE
	#执行__init__之前执行
    @classmethod
    def from_crawler(cls,crawler):
        HOST = crawler.settings.get('HOST')  #crawler.settings可以直接获得setting文件中的所有名称
        PORT = crawler.settings.get('PORT')
        USER = crawler.settings.get('USER')
        PWD = crawler.settings.get('PWD')
        DB = crawler.settings.get('DB')
        TABLE = crawler.settings.get('TABLE')
        return cls(HOST,PORT,USER,PWD,DB,TABLE)


    def open_spider(self,spider):
        self.client = MongoClient(host=self.HOST,port=self.PORT,username=self.USER,password=self.PWD)
        print('连接数据库成功')

    def close_spider(self,spider):
        self.client.close()
        print('关闭数据库')


    def process_item(self, item, spider):
        self.client[self.DB][self.TABLE].insert_one(dict(item))
        return item
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-10-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.区分
  • 二.item
    • 1.配置tem对象
      • 2.在爬虫程序中导入该类写相应的函数
      • 三.再获得item参数后scrapy会自动执行pipelines.py文件中内容
        • 1.settings文件进行注册
          • 2.配置MyscrapyPipeline方法
          相关产品与服务
          云数据库 MongoDB
          腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档