【Scrapy】Scrapy的pipelines管道使用方法

在讲解pipelines之前,我先举个例子,这样好了解爬取数据的具体过程:

  1. 发送请求
  2. 获取到数据(从网站上爬取了数据)
  3. 数据清洗(处理数据)
  4. 存储(把数据存储起来)

而现在,我介绍一下pipelines,它可以负责的就是第3和第4步的工作,专业述语就是管道。我们通过定义一个或多个class,可以用来处理我们传入的数据。

代码目录:

 

爬虫代码 mingyan_spider.py:

import scrapy

def getUrl():
    return 'https://search.51job.com/list/030200,000000,0000,00,9,99,%2520,2,1.html?lang=c&stype=&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&providesalary=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare='



class itemSpider(scrapy.Spider):
    name = 'argsSpider'
    def start_requests(self):
        url = getUrl()
        yield scrapy.Request(url, self.parse)  # 发送请求爬取参数内容

    def parse(self, response):
        mingyan = response.css('div#resultList>.el')  # 提取首页所有名言,保存至变量mingyan
        for v in mingyan:  # 循环获取每一条名言里面的:名言内容、作者、标签
            t1 = v.css('.t1 a::text').extract_first()
            t2 = v.css('.t2 a::attr(title)').extract_first()  # 提取名言
            t3 = v.css('.t3::text').extract_first()
            t4 = v.css('.t4::text').extract_first()

            t1 = str(t1).replace(' ', '')
            t1 = str(t2).replace(' ', '')
            t3 = str(t3).replace(' ', '')
            t4 = str(t4).replace(' ', '')

            item = {
                't1': t1,
                't2': t2,
                't3': t3,
                't4': t4,
            }
            yield item

配置文件setting.py:

(需要配置了,管道才能生效,数字越小,管道的优先级越高,优先调用。数字控制在0~1000. )

#SpiderjobPipeline2 先执行
ITEM_PIPELINES = {
   'spiderJob.pipelines.SpiderjobPipeline': 400,
   'spiderJob.pipelines.SpiderjobPipeline2':100,
}

 

管道文件pipelines.py:

#存储
class SpiderjobPipeline(object):
    # 可选实现,做参数初始化等
    def __init__(self):
        print("//////////////")

    # item (Item 对象) – 被爬取的item
    # spider (Spider 对象) – 爬取该item的spider
    # 这个方法必须实现,每个item pipeline组件都需要调用该方法,
    # 这个方法必须返回一个 Item 对象,被丢弃的item将不会被之后的pipeline组件所处理。
    def process_item(self, item, spider):
        fileName = 'aa.txt'  # 定义文件名
        if str(item['t1'])=='None':
            return item;
        with open(fileName, "a+", encoding='utf-8') as f:
            item = str(item['t1']) + "," + str(item['t2']) + "," + str(item['t3']) + "," + str(item['t4'])
            f.write(item)
            f.write('\n')  # ‘\n’ 表示换行
            # f.write('标签:' + tags)
            f.write('\n-------\n')
            f.close()
        return item


#先给数据加上title
class SpiderjobPipeline2(object):
    def process_item(self, item, spider):
        return {
            't1': '岗位:'+item['t1'],
            't2': '公司:'+item['t2'],
            't3': '地区:'+item['t3'],
            't4': '薪资:'+item['t4'],
        }

效果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章