•创建项目
# spiderzt为项目名
scrapy startproject spiderzt
项目目录如下:
•创建爬虫文件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
•爬取所需图片
list_img = response.css('.topic_detail_t.bg.clearfix img::attr(src)').extract() # 文中全部图片 存储于列表
ITEM_PIPELINES = {
"spiderzt.pipelines.SpiderztPipeline": 300,
"spiderzt.pipelines.ChangeurlPipeline": 2,
"scrapy.pipelines.images.ImagesPipeline": 1, # 存储图片的管道
}
IMAGES_STORE = 'images' # 保存图片的路径
IMAGES_URLS_FIELD = 'src' # 指定Item中包含图片链接的字段
•创建Item
class PicItem(scrapy.Item):
src = scrapy.Field()
•在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中处理即可
执行完以上操作就可以运行代码了
推荐使用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项目名