哈岁NB 发表于 2023-2-13 09:44:14

scrapy

大佬们,为什么这个程序没有报错,但最后却没有保存下图片,请求帮忙看一看
爬虫文件
import scrapy
from ..items import TupianItem

class TuSpider(scrapy.Spider):
    name = 'tu'
    #allowed_domains = ['www.xxx.com']
    start_urls = ['https://pic.netbian.com/4kmeinv/']

    def parse(self, response):
      li_list = response.xpath('//*[@id="main"]/div/ul/li')
      for li in li_list:
            img_src = "https://pic.netbian.com" + li.xpath('.//img/@src').extract_first()
            item = TupianItem()
            item['src'] = img_src

            yield item

items文件
import scrapy


class TupianItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    src = scrapy.Field()

pipelines文件
import scrapy

from itemadapter import ItemAdapter

from scrapy.pipelines.images import ImagesPipeline
class mediaPileline(ImagesPipeline):

    #重写三个方法
    def get_media_requests(self, item, info):

      img_src = item['src']
      print(img_src)
      yield scrapy.Request(img_src)
    def file_path(self, request, response=None, info=None, *, item=None):
      imgName = request.url.split('/')[-1]
      print(imgName,'保存成功')
      return imgName
    def item_completed(self, results, item, info):
      return item

isdkz 发表于 2023-2-13 10:36:56

本帖最后由 isdkz 于 2023-2-13 10:46 编辑

配置文件 settings.py 里面关键的三个配置设置了没有?

第一(启用 pipeline):

ITEM_PIPELINES = {
   "test0.pipelines.mediaPileline": 300                # test0 换成你的爬虫项目名
}

第二(设置图片存储路径):

IMAGES_STORE = './images'                        

第三(禁用 robots 君子协议,这个看情况加,因为有一些网站没有在 robots.txt 中对图片的爬取进行限制):

ROBOTSTXT_OBEY = False

哈岁NB 发表于 2023-2-13 13:04:04

isdkz 发表于 2023-2-13 10:36
配置文件 settings.py 里面关键的三个配置设置了没有?

第一(启用 pipeline):


启用了

isdkz 发表于 2023-2-13 13:21:07

哈岁NB 发表于 2023-2-13 13:04
启用了

启用了也还是不行吗?

哈岁NB 发表于 2023-2-13 13:53:19

isdkz 发表于 2023-2-13 13:21
启用了也还是不行吗?

是的

isdkz 发表于 2023-2-13 13:58:18

哈岁NB 发表于 2023-2-13 13:53
是的

我试了 scrapy crawl tu 没有问题呀


哈岁NB 发表于 2023-2-13 13:59:49

isdkz 发表于 2023-2-13 13:58
我试了 scrapy crawl tu 没有问题呀

那我在试试

哈岁NB 发表于 2023-2-13 14:27:27

isdkz 发表于 2023-2-13 13:58
我试了 scrapy crawl tu 没有问题呀

    def get_media_requests(self, item, info):

      img_src = item['src']
      print(img_src)
      yield scrapy.Request(img_src)
    def file_path(self, request, response=None, info=None, *, item=None):
      imgName = request.url.split('/')[-1]
      print(imgName,'保存成功')
      return imgName
    def item_completed(self, results, item, info):
      return item
我发现这三个函数不运行,这是为什么呢

isdkz 发表于 2023-2-13 14:33:44

哈岁NB 发表于 2023-2-13 14:27
我发现这三个函数不运行,这是为什么呢

你是执行 scrapy crawl tu 这条命令吗?

哈岁NB 发表于 2023-2-13 14:38:42

isdkz 发表于 2023-2-13 14:33
你是执行 scrapy crawl tu 这条命令吗?

是的

哈岁NB 发表于 2023-2-13 14:40:36

isdkz 发表于 2023-2-13 14:33
你是执行 scrapy crawl tu 这条命令吗?

这个输入完,啥也不保存就结束了

isdkz 发表于 2023-2-13 14:42:40

哈岁NB 发表于 2023-2-13 14:38
是的

那奇怪了,这个看着也没有问题呀

哈岁NB 发表于 2023-2-13 14:44:00

isdkz 发表于 2023-2-13 14:42
那奇怪了,这个看着也没有问题呀

那我再试试

isdkz 发表于 2023-2-13 14:52:14

哈岁NB 发表于 2023-2-13 14:44
那我再试试

截一下 tu.py 给我看看

哈岁NB 发表于 2023-2-13 15:10:48

isdkz 发表于 2023-2-13 14:52
截一下 tu.py 给我看看

这个

isdkz 发表于 2023-2-13 15:25:53

哈岁NB 发表于 2023-2-13 15:10
这个

有可能是你获取到的不是图片链接,你 print 一下 img_src 看看

import scrapy
from ..items import TupianItem

class TuSpider(scrapy.Spider):
    name = 'tu'
    #allowed_domains = ['www.xxx.com']
    start_urls = ['https://pic.netbian.com/4kmeinv/']

    def parse(self, response):
      li_list = response.xpath('//*[@id="main"]/div/ul/li')
      
      for li in li_list:
            img_src = "https://pic.netbian.com" + li.xpath('.//img/@src').extract_first()
            print(img_src)               # print 一下 img_src
            item = TupianItem()
            item['src'] = img_src

            yield item

哈岁NB 发表于 2023-2-13 15:43:11

isdkz 发表于 2023-2-13 15:25
有可能是你获取到的不是图片链接,你 print 一下 img_src 看看

链接没错呀

isdkz 发表于 2023-2-13 16:00:09

本帖最后由 isdkz 于 2023-2-13 16:02 编辑

哈岁NB 发表于 2023-2-13 15:43
链接没错呀

我知道你什么问题了,你把 LOG_LEVEL 设置成 ERROR 级别了,不然你应该会看到这么一个 WARNING

2023-02-13 15:57:27 WARNING: Disabled mediaPileline: ImagesPipeline requires installing Pillow 4.0.0 or later

这个就是说 禁用了 mediaPileline (Disabled mediaPileline),

因为ImagesPipeline 需要安装 Pillow 4.0.0 或者更新的版本(ImagesPipeline requires installing Pillow 4.0.0 or later)

所以你要安装一下 Pillow:
pip install pillow -i https://mirrors.aliyun.com/pypi/simple

哈岁NB 发表于 2023-2-13 16:47:09

isdkz 发表于 2023-2-13 16:00
我知道你什么问题了,你把 LOG_LEVEL 设置成 ERROR 级别了,不然你应该会看到这么一个 WARNING




解决了解决了,感谢感谢,这个包是干什么用的呢

isdkz 发表于 2023-2-13 16:51:46

哈岁NB 发表于 2023-2-13 16:47
解决了解决了,感谢感谢,这个包是干什么用的呢

Pillow是用来处理图片的
页: [1] 2
查看完整版本: scrapy