Scrapy下载图片并修改为OSS地址

Scrapy下载图片并修改为OSS地址

新建爬虫

创建项目

# spiderzt为项目名
scrapy startproject  spiderzt

项目目录如下:

Scrapy下载图片并修改为OSS地址_第1张图片

•创建爬虫文件doyo.py

在spiders文件中创建新的爬虫文件

import scrapy
class DoyonewsSpider(scrapy.Spider):
    name = "doyo"  # spider名称
    allowed_domains = ["www.doyo.cn"]  # 目标网站主域名
    start_urls = ["https://www.doyo.cn/zhuanti/tpysapp/"]  # 爬虫起始域名

    # 解析函数,如果没有指定callback,请求完成后将自动回调parse进行解析
    def parse(self, response):
        pass

爬取所需图片

Scrapy下载图片并修改为OSS地址_第2张图片

list_img = response.css('.topic_detail_t.bg.clearfix img::attr(src)').extract()  # 文中全部图片 存储于列表

setting代码

ITEM_PIPELINES = {
    "spiderzt.pipelines.SpiderztPipeline": 300,
    "spiderzt.pipelines.ChangeurlPipeline": 2,
    "scrapy.pipelines.images.ImagesPipeline": 1, # 存储图片的管道
}
IMAGES_STORE = 'images' # 保存图片的路径
IMAGES_URLS_FIELD = 'src' # 指定Item中包含图片链接的字段

item代码

•创建Item

class PicItem(scrapy.Item):
    src = scrapy.Field()

spider代码

•在doyo.py中调用Item类

并且获取图片下载的名称(哈希值)

import hashlib
from scrapy.utils.python import to_bytes
# 注意 想要获取图片哈希值(list_img)必须导入hashlib
# 并导入scrapy.utils.python模块中的to_bytes函数 以确保在进行哈希算法是正确处理字节类型数据

def parse(self, response):
    src = response.css('.topic_detail_t.bg.clearfix img::attr(src)').extract()  # 文中全部图片 存储于列表
    
    for i in range(len(list_img)):
    	list_img[i] = f"full/{hashlib.sha1(to_bytes(list_img[i])).hexdigest()}.jpg"
        # 如果full文件夹不存在则会自动创建
        # list_img中的每一个链接字符就是下载后的本地图片名称
        
	pic_item = PicItem()
	pic_item['src'] = src	# 此时图片就会自动下载到image/full目录文件下了 

**注意 该代码中即使没有list_img也能正常下载图片
如果想要对图片进行处理 例如将图片链接修改为云存储链
那么只需要将list_img放入pipeline中处理即可

例如将图片链接拼接成oss地址的字符串:
Scrapy下载图片并修改为OSS地址_第3张图片

爬取结果

执行完以上操作就可以运行代码了

推荐使用main()方法以便在多个爬虫之间进行处理
**注意main文件和最外层文件夹同级

from scrapy.cmdline import execute

import sys
import os

sys.path.append(os.path.dirname(os.path.abspath(__file__)))
execute(["scrapy", "crawl", "doyo"]) # doyo为你需要运行的spiders项目名

运行结果成功~
Scrapy下载图片并修改为OSS地址_第4张图片

你可能感兴趣的:(Scrapy框架,scrapy,python,网络爬虫,阿里云)