请各位大佬看看关于Scrapy ImagesPipeline对图片进行爬取无法存入本地的问题

使用Scrapy对dm5网站进行抓取,但是pipeline无法对图片进行储存,可打印出文件路径

爬虫文件

import scrapy
from dm5pro.items import Dm5ProItem
import execjs
import re
from w3lib import url as wurl

class Dm5Spider(scrapy.Spider):
    name = 'dm5'
    # allowed_domains = ['www.xxx.com']
    start_urls = ['http://www.dm5.com/manhua-list/']
    url = 'http://www.dm5.com/manhua-list-p{}/'

    def parse(self, response):
        li_list = response.xpath('/html/body/section[2]/div/ul/li')
        for li in li_list:
            comic_title = li.xpath('./div/div[1]/h2/a/text()').extract_first()
            comic_url = 'http://www.dm5.com/' + li.xpath('./div/div[1]/h2/a/@href').extract_first()
            item = Dm5ProItem()
            item['comic_title'] = comic_title
            yield scrapy.Request(comic_url, callback=self.chapter_parse, meta={'item': item})

    def chapter_parse(self, response):
        li_list = response.xpath('//*[@id="detail-list-select-1"]/li')
        for li in li_list:
            chapter_name = li.xpath('./a/text()').extract_first()
            chapter_url = 'http://www.dm5.com/' + li.xpath('./a/@href').extract_first()
            item = response.meta['item']
            item['chapter_name'] = chapter_name.strip()
            yield scrapy.Request(chapter_url, callback=self.content_parse, meta={'item': item})

    def content_parse(self, response):
        page_text = response.text
        cid = re.findall('var DM5_CID=(.+?);', page_text)[0].strip()
        page_count = re.findall('var DM5_PAGEPCOUNT =(.+?);', page_text)[0].strip()
        _mid = re.findall('var DM5_MID=(.+?);', page_text)[0].strip()
        _dt = re.findall('var DM5_VIEWSIGN_DT="(.+?)";', page_text)[0].strip()
        _sign = re.findall('var DM5_VIEWSIGN="(.*?)";', page_text)[0].strip()
        page = 1
        while page < int(page_count):
            url = f'{response.url}chapterfun.ashx?cid={cid}&page=1&key=&language=1&gtk=6&_cid={cid}&_mid={_mid}&_dt={_dt}&_sign={_sign}'
            yield scrapy.Request(url,callback=self.content_parse_2,meta={'item':response.meta['item']})

    def content_parse_2(self, response):
        js_code = response.text
        img_urls = execjs.eval(js_code)
        img_url = img_urls[0]
        item = response.meta['item']
        item['src'] = img_url
        img_name = wurl.parse_url(img_url).path.split('/')[-1]
        item['img_name'] = img_name
        yield item

items文件

import scrapy


class Dm5ProItem(scrapy.Item):
    # define the fields for your item here like:
    comic_title = scrapy.Field()
    chapter_name = scrapy.Field()
    src = scrapy.Field()
    img_name = scrapy.Field()

pipeline.py

import scrapy
from scrapy.pipelines.images import ImagesPipeline

class Dm5ProPipeline(ImagesPipeline):
    def get_media_requests(self, item, info):
        yield scrapy.Request(item['src'],meta={'item':item})

    def file_path(self, request, response=None, info=None):
        filename = 'full/%s/%s/%s' % (request.meta['item']['comic_title'], request.meta['item']['chapter_name'], request.meta['item']['img_name'])
        print(filename)
        # print(f"{request.meta['item']['comic_title']}{request.meta['item']['chapter_name']}, {request.meta['item']['img_name']}已下载完毕")
        # img_name = request.meta['item']['img_name']
        # print(img_name)
        return filename

    def item_completed(self, results, item, info):
        return item

settings.py

BOT_NAME = 'dm5pro'
SPIDER_MODULES = ['dm5pro.spiders']
NEWSPIDER_MODULE = 'dm5pro.spiders'
LOG_LEVEL = 'ERROR'
IMAGES_STORE = './dm5imags/'
# Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.20 (KHTML, like Gecko) Chrome/11.0.672.2 Safari/534.20",

# Obey robots.txt rules
ROBOTSTXT_OBEY = False
ITEM_PIPELINES = {
    'dm5pro.pipelines.Dm5ProPipeline': 300,
}

控制台打印数据

full/怪兽8/1/1_4067.jpg
full/拳愿奥米伽/56话 代表决定/1_5025.jpg
full/拳愿奥米伽/56话 代表决定/1_1796.jpg
full/拳愿奥米伽/56话 代表决定/1_7146.jpg
full/因为成了魔王的手下所以要毁掉原作/1/1_1776.jpg
full/觉醒开挂技能【死者苏生】,然后将古老的魔王军复活了/1/1_5355.jpg
full/拳愿奥米伽/56话 代表决定/1_9932.jpg
full/转生剑圣想要悠闲地生活/1话 剑圣姬的护卫/1_1164.jpg
full/物理魔法使马修/9/1_8784.jpg
full/物理魔法使马修/9/1_6847.jpg
full/身为『普通』公爵千金的我,才不会成为恶役!/1/1_8022.jpg
full/身为『普通』公爵千金的我,才不会成为恶役!/1/1_8544.jpg
full/女儿的朋友/27话 反常与正常/1_1453.jpg
full/身为『普通』公爵千金的我,才不会成为恶役!/1/1_6013.jpg
full/身为『普通』公爵千金的我,才不会成为恶役!/1/1_7939.jpg
full/来到异世界的我靠着神速和万能技能进行着旅行/1/1_5155.jpg
full/来到异世界的我靠着神速和万能技能进行着旅行/1/1_4763.jpg
full/来到异世界的我靠着神速和万能技能进行着旅行/1/1_3855.jpg
full/来到异世界的我靠着神速和万能技能进行着旅行/1/1_3603.jpg
full/来到异世界的我靠着神速和万能技能进行着旅行/1/1_5353.jpg
full/来到异世界的我靠着神速和万能技能进行着旅行/1/1_9599.jpg
full/来到异世界的我靠着神速和万能技能进行着旅行/1/1_9177.jpg
full/来到异世界的我靠着神速和万能技能进行着旅行/1/1_8371.jpg
full/女儿的朋友/27话 反常与正常/1_2871.jpg
full/女儿的朋友/27话 反常与正常/1_6726.jpg
full/女儿的朋友/27话 反常与正常/1_6413.jpg
full/女儿的朋友/27话 反常与正常/1_7461.jpg
full/女儿的朋友/27话 反常与正常/1_8771.jpg
full/来到异世界的我靠着神速和万能技能进行着旅行/1/1_7061.jpg
full/女儿的朋友/27话 反常与正常/1_6704.jpg
full/女儿的朋友/27话 反常与正常/1_8226.jpg
full/女儿的朋友/27话 反常与正常/1_1346.jpg
^Cfull/女儿的朋友/27话 反常与正常/1_8037.jpg
full/女儿的朋友/27话 反常与正常/1_3129.jpg
^C^C^Cfull/女儿的朋友/27话 反常与正常/1_3134.jpg
full/女儿的朋友/27话 反常与正常/1_9994.jpg
bogon:dm5pro licongjian$ scrapy crawl dm5
full/月入50万毫无人生目标的隔壁大姐姐每月花30万雇我跟他说“欢迎回家”的工作太开心了/1话 邻家的早乙女小姐/1_5816.jpg
full/怪兽8/1/1_5600.jpg
full/拳愿奥米伽/56话 代表决定/1_6065.jpg
full/我们在秘密交往/0/1_9532.jpg
full/我们在秘密交往/0/1_4130.jpg
full/拳愿奥米伽/56话 代表决定/1_1774.jpg
full/拳愿奥米伽/56话 代表决定/1_1796.jpg
full/物理魔法使马修/9/1_6847.jpg
full/异世界默示录米诺戈拉/1话 NewGame/1_6485.jpg
full/拳愿奥米伽/56话 代表决定/1_5025.jpg
full/物理魔法使马修/9/1_1112.jpg
full/转生剑圣想要悠闲地生活/1话 剑圣姬的护卫/1_9728.jpg
full/拳愿奥米伽/56话 代表决定/1_1253.jpg
full/来到异世界的我靠着神速和万能技能进行着旅行/1/1_5155.jpg
full/女儿的朋友/27话 反常与正常/1_1453.jpg
full/来到异世界的我靠着神速和万能技能进行着旅行/1/1_3855.jpg
full/来到异世界的我靠着神速和万能技能进行着旅行/1/1_4763.jpg
full/来到异世界的我靠着神速和万能技能进行着旅行/1/1_3603.jpg
full/物理魔法使马修/9/1_8784.jpg
full/来到异世界的我靠着神速和万能技能进行着旅行/1/1_9177.jpg
full/来到异世界的我靠着神速和万能技能进行着旅行/1/1_5353.jpg
full/来到异世界的我靠着神速和万能技能进行着旅行/1/1_9599.jpg
full/来到异世界的我靠着神速和万能技能进行着旅行/1/1_8371.jpg
full/隔壁的大人/1话 大人的谜团/1_1388.jpg

请各位大佬帮忙看下无法储存的问题是什么。。研究一晚上了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值