前言

写博客的人一定都会有一个图床,将图片存在那里。发现自己以前没有注意图片来源问题,随手就贴在博客上面了。现在有不少图片都挂了,换句话来说有可能自己目前用的图床不提供服务了,那所有的图片都有可能丢失......所以打算写个脚本,把以前博客的图片保存下来,并在以后发博的时候注意保存本地图片。emmm,程序如下,主要是个人用脚本,所以很多地方就是图自己的方便、根据自己的情况写的:

代码

  1. # -*- coding: utf-8 -*-
  2. import os
  3. import requests
  4. from bs4 import BeautifulSoup
  5. import re
  6. import time
  7. from subprocess import call
  8. path = "./back_up/"
  9. url = "https://www.cnblogs.com/yunlambert/p/"
  10. model = 'http://equations.online/'
  11. def download(DownUrl, DownPath, OutPutFileName):
  12. IDM = r'D:\yun_install_software\IDM\IDMan.exe'
  13. DownPath = r'E:\workstation\Github\Blog_Pictures\back_up'
  14. call([IDM, '/d', DownUrl, '/p', DownPath, '/f', OutPutFileName, '/n'])
  15. def get_url(url):
  16. try:
  17. headers = {
  18. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/51.0.2704.63 Safari/537.36'}
  19. response = requests.get(url, headers=headers, timeout=30)
  20. if response.status_code == 200:
  21. return response.text
  22. else:
  23. print(response.status_code)
  24. return None
  25. except:
  26. print('Error open the page... ')
  27. return None
  28. def get_pages(post_page):
  29. pages = []
  30. while True:
  31. try:
  32. post_pages = post_page.find_all(name="a")[-2].get('href')
  33. temp = get_url("https://www.cnblogs.com" + post_pages)
  34. post_page = BeautifulSoup(temp, "lxml")
  35. pages.append("https://www.cnblogs.com" + post_pages)
  36. # print(post_pages)
  37. except Exception as e:
  38. print(Exception, ":", e)
  39. break
  40. return pages
  41. def main():
  42. folder = os.path.exists(path)
  43. if not folder:
  44. os.makedirs(path)
  45. html = get_url(url)
  46. soup = BeautifulSoup(html, "lxml")
  47. post_page_1 = soup.find(name='div', attrs={"class": "Pager"})
  48. post_page = get_pages(post_page_1)
  49. post_page.insert(0, "https://www.cnblogs.com/yunlambert/p/?page=1")
  50. print(post_page)
  51. post_article = []
  52. for i in range(0, len(post_page)):
  53. link = post_page[i]
  54. page = BeautifulSoup(get_url(link), "lxml")
  55. try:
  56. article = page.find_all(name="div", attrs={"class": "postTitl2"})
  57. for j in range(0, len(article)):
  58. post_article.append(article[j].a.get("href"))
  59. except Exception as e:
  60. print(Exception, ":", e)
  61. continue
  62. print(post_article)
  63. img_url_list = []
  64. for i in range(0, len(post_article)):
  65. print("new article....")
  66. m = get_url(post_article[i])
  67. soup_article = BeautifulSoup(m, "lxml")
  68. replace_pattern = r'<[img|IMG].*?/>' # img标签的正则式
  69. img_url_pattern = r'.+?src="(\S+)"' # img_url的正则式
  70. # 只在段落中查找图片
  71. need_replace_list = re.findall(replace_pattern, str(soup_article.find_all('p'))) # 找到所有的img标签
  72. for tag in need_replace_list:
  73. if re.findall(img_url_pattern, tag) != []:
  74. download_path = "E:\\workstation\\Github\\Blog_Pictures\\back_up\\"
  75. # download_name = re.findall(img_url_pattern, tag)[0].split('/')[-6]
  76. now = time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time()))
  77. download_name = now + ".png"
  78. download(re.findall(img_url_pattern, tag)[0], download_path, download_name)
  79. print(re.findall(img_url_pattern, tag)[0])
  80. img_url_list.append(re.findall(img_url_pattern, tag)[0]) # 找到所有的img_url
  81. if __name__ == "__main__":
  82. main()

用IDM下载博客图片的更多相关文章

  1. Python 实用爬虫-04-使用 BeautifulSoup 去水印下载 CSDN 博客图片

    Python 实用爬虫-04-使用 BeautifulSoup 去水印下载 CSDN 博客图片 其实没太大用,就是方便一些,因为现在各个平台之间的图片都不能共享,比如说在 CSDN 不能用简书的图片, ...

  2. hexo博客图片问题

    hexo博客图片问题 第一步 首先确认_config.yml 中有 post_asset_folder:true. Hexo 提供了一种更方便管理 Asset 的设定:post_asset_folde ...

  3. Ruby:多线程队列(Queue)下载博客文章到本地

    Ruby:多线程下载博客文章到本地的完整代码 #encoding:utf-8 require 'net/http' require 'thread' require 'open-uri' requir ...

  4. 利用Python进行博客图片压缩

    自己写博客的时候常常要插入一些手机拍的照片,都是几M的大小,每张手动压缩太费事了,于是根据自己博客的排版特点用Python写了一个简单的图片压缩脚本,功能是将博客图片生成缩略图,横屏的图片压缩为宽度最 ...

  5. 博客图片失效?使用npm工具一次下载/替换所有失效的外链图片

    前言 大约一个月前,微博的图片外链失效了,以及掘金因为盗链问题也于2019/06/06决定开启防盗链,造成的影响是:个人博客网站的引用了这些图片外链都不能显示. 目前微博和掘金的屏蔽,在CSDN和se ...

  6. 网易云免费OSS服务用做Markdown图床或博客图片外链

    我使用据说是Windows下最好用的Markdown编辑器“MarkdownPad2”(个人感觉还是Visual Code+Markdown插件666)写Markdown,在贴图方面遇到一个问题,于是 ...

  7. 博客图片上传picgo工具安装配置github图传使用

    摘要 对于每一个写博客的人来说,图片是至关重要.这一路经历了多次图片的烦恼,之前选择了微博个人文章那里粘贴图片的方式上传,感觉也挺方便的.但是由于新浪的图片显示问题,如果header中不设置 标签就不 ...

  8. 修正_typora文档复制到博客图片失效

    开始 今天开始尝试使用 Typora 写markdown 然后复制到博客园,不过会有一个问题 那就是 typroa 插入的图片都是本地的,md文档复制到博客园之后,图片都失效了 通过百度,有工具可以直 ...

  9. Hexo 博客图片添加至图床---腾讯云COS图床使用。

    个人博客:https://mmmmmm.me 源码:https://github.com/dataiyangu/dataiyangu.github.io 腾讯云官网 登录注册 创建存储桶 进入上面的存 ...

随机推荐

  1. Oracle字符集的查看查询和Oracle字符集的设置修改(转)

    最近郁闷的字符集2014年7月31日16:32:58 本文主要讨论以下几个部分:如何查看查询oracle字符集. 修改设置字符集以及常见的oracle utf8字符集和oracle exp 字符集问题 ...

  2. Linux 程序和进程的关系

    查看进程命令 ps  ps -elf|grep init|grep -v grep 查看init进程ID号:ps aux |grep init |grep -v grep; ps aux 会把系统所有 ...

  3. 661. Image Smoother色阶中和器

    [抄题]: Given a 2D integer matrix M representing the gray scale of an image, you need to design a smoo ...

  4. SQLite在php中的接口

    sqlite是一种比较轻型的嵌入式数据库,它与 SQL 之间的不同,为什么需要它,以及它的应用程序数据库处理方式.SQLite是一个软件库,实现了自给自足的.无服务器的.零配置的.事务性的 SQL 数 ...

  5. 7.内网渗透之windows认证机制

    文章参考自三好学生域渗透系列文章 看了内网渗透第五篇文章,发现如果想要真正了解PTT,PTH攻击流程,还需要了解windows的认证机制,包括域内的kerberos协议. windows认证机制 在域 ...

  6. 智能IC卡与终端(读卡器)之间的传输协议

    1.有两种协议 T=0,异步半双工字符传输协议 T=1,异步半双工块传输协议 终端一般都支持这两种协议,IC卡可以选择支持其中的一种.(因为终端可能需要面对各种类型的卡片,所以必须两种协议都支持,而卡 ...

  7. 下载特定区域内街景照片数据 | Download Street View Photos within Selected Region

    作者:姜虹,刘子煜,王玥瑶,杨安琪,天靖居士 街景图片可以通过api下载,但需要提供参数,参数中的poiid.panoid.location可以用来确定位置或全景图片的ID以确定对应的街景图片.优先级 ...

  8. Spring:配置文件

    首先是bean.xml,配置所有的bean,一般也叫applicationContext.xml,应用程序上下文.示例: <?xml version="1.0" encodi ...

  9. How do I create a .pyc file?

    Python automatically compiles your script to compiled code, so called byte code, before running it. ...

  10. JQuery中一些常用函数的运用

    一.JQuery的效果介绍 二.定时弹出广告图片JQ部分代码 <script type="text/javascript"> var time; $(function( ...