scrapy中item和pipeline和yield和callback用法

配置

要将sitting中ITEM_PIPELINES = { 'mingyan.pipelines.MingyanPipeline': 300, }注释取消。最好将ROBOTSTXT_OBEY = False设置为False

代码

spider中代码使用了item和pipline

class itemSpider(scrapy.Spider):
    name = 'itemSpider'
    item = MingyanItem()
    start_urls = ['http://mil.news.sina.com.cn/roll/index.d.html?cid=57918']
    def parse(self, response):
        ul = response.css('.sub_page li a::attr(href)').extract()
        for i in ul:
            if i.startswith('http://mil.news.sina.com.cn/roll/'):
                li=response.css('.fixList .linkNews li')
                for l in li:
                    link = l.css('a::attr(href)').extract_first()  # 提取首页所有url
                    title=l.css('a::text').extract_first()#提取title
                    self.item['link'] = link
                    self.item['title'] = title
                    yield self.item

                next_page = response.css('.pagebox_next a::attr(href)').extract_first()
                if next_page is not None:
                    print(next_page)
                    next_page = response.urljoin(next_page)
                    yield self.item,scrapy.Request(next_page, callback=self.parse)
item
import scrapy

class MingyanItem(scrapy.Item):
    title=scrapy.Field() #以字典的形式存放其中title和link为字典中的key
    link=scrapy.Field()

    pass
piplines

在yield item时调用用于存储信息

import os
import json
class MingyanPipeline(object):
    def process_item(self, item, spider):
        file_name = os.path.join('./junshi.json')
        print(os.path.abspath(file_name))
        with open(file_name, "a+",encoding='utf-8') as f:  # “a+”以追加的形式
            f.write(json.dumps(dict(item),ensure_ascii=False,sort_keys=False)+'\n')
        # print(item['text'])
        return item

yield相当于return
callback回调函数

知识点:cls清空终端命令行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值