五、ITcast小爬虫 与管道文件

1、介绍Item Pipeline

当Item在Spider中被收集之后,它将会被传递到Item Pipeline,

这些Item Pipeline组件按照定义的顺序处理Item,每一个Item Pipeline 都是实现了简单方法的Python类

Item Pipeline组件是一个独立的Python类,编写Item Pipeline时,process_item()方法必须实现

2、启用一个Item Pipeline组件

写好了pipelines.py之后,为了启用Item Pipeline组件,必需将它的类添加到setting.py文件中的ITEM_PIPELINES配置,如下:

分配给每个类的整型值,确定了他们运行的顺序,item按数字从低到高的顺序,通过Pipeline,数字定义在1-1000之间,数值越低,组件的优先级越高。

3、完善之前的案例

不再用列表items存储item,而是将每一个item返回给引擎,引擎交给管道文件来处理每一个item。

以下用Pipeline将所有爬取到的Item,存储到一个独立的item.json文件中,每行包含一个序列化为‘Json’格式的‘item’

打开pipelines.py文件写入以下代码:

import json
class ItcastPipeline(object):
    def __init__(self):
        self.f = open("itcast_pipeline.json",'wb+')
        #self.f = open("itcast_pipeline.json",'w')以w方式打开会出现错误。
    
    def process_item(self, item, spider):
        content = json.dumps(dict(item),ensure_ascii = False)+",\n"
        self.f.write(content.encode("utf-8"))
        return item   #数据返回给引擎,告知此item已经处理完毕,否则会引起信号中断
    
    def close_spider(self,spider):
        self.f.close()

spiders/itcast.py文件要有稍微的改动:去掉列表items相关代码,增加 yield item,代码如下:

#RVB NMYGFVC 98Aq23 -*- coding: utf-8 -*-
import scrapy
from ITcast.items import ItcastItem #导入item

class ItcastSpider(scrapy.Spider):
    #爬虫名,启动爬虫时需要的参数*必需
    name = 'itcast'
    #爬取域的范围,允许爬虫在这个域下进行爬取(可选)
    allowed_domains = ['http://www.itcast.cn']
    #起始url列表,爬虫执行后第一批请求将从这个列表获取
    start_urls = ['http://www.itcast.cn/channel/teacher.shtml']

    def parse(self, response):#解析响应文件
        node_list = response.xpath("//div[@class='li_txt']")
        for node in node_list:
            #创建item字段对象,用来存储字段信息
            item = ItcastItem()
            #.extract()提取出xpath对象的内容部分,提取之后是个列表,需要取索引
            name = node.xpath("./h3/text()").extract()
            title = node.xpath("./h4/text()").extract()
            info = node.xpath("./p/text()").extract()
            #把信息存储到item字段中
            item['name'] = name[0]
            item['title'] = title[0]
            item['info'] = info[0]
            #返回提取到的每个item数据,给管道文件处理,同时还回来执行后面的代码即继续执行for循环
            yield item 
         

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值