ITPub博客

首页 > 应用开发 > Python > scrapy 采集常用的Pipeline(输出文件、图片下载)

scrapy 采集常用的Pipeline(输出文件、图片下载)

原创 Python 作者:cms5 时间:2020-09-28 16:50:44 1 删除 编辑

scrapy 采集常用的pipeline,备份一下

import json
import pymysql
from scrapy import Request
from twisted.enterprise import adbapi
from scrapy.exceptions import DropItem
from scrapy.pipelines.images import ImagesPipeline
class YwnamePipeline:
    def process_item(self, item, spider):
        return item
class myEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, bytes):
            return str(obj,encoding='utf-8')
        return json.JSONEncoder.default(self, obj)
class FilePipeline(object):
    def __init__(self):
        self.f = open("ywname.json", "w",encoding='utf-8')
        self.f.write("[")
    def process_item(self, item, spider):
        # dict 列表转成字典,再转成json
        text = json.dumps(dict(item), ensure_ascii=False, cls=myEncoder) + ",\n"
        # text = json.dumps(dict(item), ensure_ascii=False) + "\n"
        self.f.write(text)
        return item
    def close_spider(self, spider):
        self.f.write("]")
        self.f.close()
 class DownimagesPipeline(ImagesPipeline):
    def file_path(self, request, response=None, info=None):
        url = request.url
        file_name = "https://haotingde.com/"url.split('/')[-1]
        return file_name
    def item_completed(self, results, item, info):
        image_paths = [x['path'] for ok, x in results if ok]
        if not image_paths:
            raise DropItem('Image Downloaded Failed')
        return item
    def get_media_requests(self, item, info):
        yield Request(item['url'])

转自: https://912616.com/app/python/307.html

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29699285/viewspace-2724859/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2014-06-09

  • 博文量
    8
  • 访问量
    78277