当前位置: 首页 > news >正文

《爬虫》爬取页面图片并保存

爬虫

  • 前言
  • 代码
  • 效果


简单的爬取图片

前言

这几天打算整理与迁移一下博客。因为 CSDN 的 Markdown 编辑器很好用 ,所以全部文章与相关图片都保存在 CSDN。而且 CSDN 支持一键导出自己的文章为 markdown 文件。但导出的文件中图片的连接依旧是 url 连接。为了方便将图片保存到本地,在这里保存一下爬虫代码。

只要修改正则匹配代码,同样适用于博客园爬取。

代码

为了提高效率,该脚本将从保存的本地 markdown 文件读取图片链接。当然脚本中也保留了爬取某个页面所有图片的函数。

脚本名:spider.py

import urllib.request 
import urllib.parse
import sys
import os
import re def open_url(url):'''用于网页爬取。这里不采用这个函数'''req = urllib.request.Request(url) req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0')# 访问url,并将页面的二进制数据赋值给 pagepage = urllib.request.urlopen(req)# 将page中的内容转换为utf-8编码html = page.read().decode('utf-8')return htmldef read_file(file):print('\n正在读取文件...')with open(file, 'rb') as my_file:content = my_file.read()content = content.decode('utf-8')print('已读取文件.')return contentdef get_img(content, file_path):# 正则匹配图片链接# p=r'<img src="([^"]+\.png)"'  # 可用于网页爬取p=r'https://img-blog\.csdnimg\.cn/[\w\-/]+\.(?:png|jpg|jpeg)'#返回正则表达式在字符串中所有匹配结果的列表print('\n正在读取图片链接...')img_list=re.findall(p, content)list_len = str(len(img_list))print('已读取图片链接.\n')for img_url in img_list:print(img_url)print('\n共 ' + list_len + ' 条数据')# 图片保存位置。如果文件夹不存在则创建save_path = file_path + '/assets/'if not os.path.exists(save_path):os.makedirs(save_path)print('\n正在保存图片...\n')num = 0  # 用于记录进度for each in img_list:#以 / 为分隔符,-1返回最后一个值photo_name=each.split("/")[-1]#访问 each,并将页面的二进制数据赋值给photophoto=urllib .request .urlopen(each)w=photo .read()# f=open(save_path + photo_name + '.png', 'wb')f=open(save_path + photo_name, 'wb')f.write(w)f.close()# 展示进度print(num % 10, end="")if (num + 1) % 10 == 0 and num != 0:print('    进度: ' + str(num + 1) + '/' + list_len)sys.stdout.flush()  # 刷新输出缓冲num += 1print('\n\n完成!\n')if __name__=='__main__':if len(sys.argv) != 2:print("\nUsage:   python spider.py <file>")print('example: python spider.py "F:\\T\\test.md"')sys.exit()file = str(sys.argv[1])file_name = os.path.basename(file)file_path = os.path.dirname(file)print('\nfile_name: ' + file_name)print('file_path: ' + file_path)# 读取文件内容content = read_file(file)# 爬取图片get_img(content, file_path)

效果

在这里插入图片描述

在这里插入图片描述


别后相思人似月,云间水上到层城。

——《明月夜留别》(唐)李冶

http://www.lryc.cn/news/122328.html

相关文章:

  • 【项目部署】JavaScript解析JSON解析报错Unexpected token xxx is not valid JSON
  • 做接口测试如何上次文件
  • Java SPI机制详解-01
  • 由浅入深C系列六:C中实现字符串trim的功能
  • 博客网站添加复制转载提醒弹窗Html代码
  • ubuntu下nfs服务安装
  • Unity框架学习--2
  • WebRTC音视频通话-实现GPUImage视频美颜滤镜效果iOS
  • 82. 删除排序链表中的重复元素 II
  • centos 7.x 单用户模式
  • 取证--理论
  • Tik Tok娱乐+电商MCN怎么做?
  • java 自定义xss校验注解实现
  • Selenium图片滑块验证码
  • CAP理论与MongoDB一致性,可用性的一些思考
  • lc2536.子矩阵元素加1
  • C#使用OpenCv(OpenCVSharp)图像全局二值化处理实例
  • Patch SCN一键解决ORA-600 2662故障---惜分飞
  • const、指针、引用的综合
  • gitee linux免密/SSH 方式连接免登录
  • 计网第一章
  • windows升级记
  • 【Windows 常用工具系列 5 -- Selenium IDE的使用方法 】
  • 现代无人机技术
  • 【机器学习 | 数据预处理】 提升模型性能,优化特征表达:数据标准化和归一化的数值处理技巧探析
  • 渐进增强和优雅降级区别
  • 使用provision创建的arxml文件,导入到第三方工具需要注意哪些方面?
  • Node.js的核心模块——path
  • 【MAC】 M2 brew安装 docker 运行失败 解决
  • iPhone苹果手机触屏失灵无法关机,如何强制重启