用IDM下载博客图片
前言
写博客的人一定都会有一个图床,将图片存在那里。发现自己以前没有注意图片来源问题,随手就贴在博客上面了。现在有不少图片都挂了,换句话来说有可能自己目前用的图床不提供服务了,那所有的图片都有可能丢失......所以打算写个脚本,把以前博客的图片保存下来,并在以后发博的时候注意保存本地图片。emmm,程序如下,主要是个人用脚本,所以很多地方就是图自己的方便、根据自己的情况写的:
代码
# -*- coding: utf-8 -*-
import os
import requests
from bs4 import BeautifulSoup
import re
import time
from subprocess import call
path = "./back_up/"
url = "https://www.cnblogs.com/yunlambert/p/"
model = 'http://equations.online/'
def download(DownUrl, DownPath, OutPutFileName):
IDM = r'D:\yun_install_software\IDM\IDMan.exe'
DownPath = r'E:\workstation\Github\Blog_Pictures\back_up'
call([IDM, '/d', DownUrl, '/p', DownPath, '/f', OutPutFileName, '/n'])
def get_url(url):
try:
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/51.0.2704.63 Safari/537.36'}
response = requests.get(url, headers=headers, timeout=30)
if response.status_code == 200:
return response.text
else:
print(response.status_code)
return None
except:
print('Error open the page... ')
return None
def get_pages(post_page):
pages = []
while True:
try:
post_pages = post_page.find_all(name="a")[-2].get('href')
temp = get_url("https://www.cnblogs.com" + post_pages)
post_page = BeautifulSoup(temp, "lxml")
pages.append("https://www.cnblogs.com" + post_pages)
# print(post_pages)
except Exception as e:
print(Exception, ":", e)
break
return pages
def main():
folder = os.path.exists(path)
if not folder:
os.makedirs(path)
html = get_url(url)
soup = BeautifulSoup(html, "lxml")
post_page_1 = soup.find(name='div', attrs={"class": "Pager"})
post_page = get_pages(post_page_1)
post_page.insert(0, "https://www.cnblogs.com/yunlambert/p/?page=1")
print(post_page)
post_article = []
for i in range(0, len(post_page)):
link = post_page[i]
page = BeautifulSoup(get_url(link), "lxml")
try:
article = page.find_all(name="div", attrs={"class": "postTitl2"})
for j in range(0, len(article)):
post_article.append(article[j].a.get("href"))
except Exception as e:
print(Exception, ":", e)
continue
print(post_article)
img_url_list = []
for i in range(0, len(post_article)):
print("new article....")
m = get_url(post_article[i])
soup_article = BeautifulSoup(m, "lxml")
replace_pattern = r'<[img|IMG].*?/>' # img标签的正则式
img_url_pattern = r'.+?src="(\S+)"' # img_url的正则式
# 只在段落中查找图片
need_replace_list = re.findall(replace_pattern, str(soup_article.find_all('p'))) # 找到所有的img标签
for tag in need_replace_list:
if re.findall(img_url_pattern, tag) != []:
download_path = "E:\\workstation\\Github\\Blog_Pictures\\back_up\\"
# download_name = re.findall(img_url_pattern, tag)[0].split('/')[-6]
now = time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time()))
download_name = now + ".png"
download(re.findall(img_url_pattern, tag)[0], download_path, download_name)
print(re.findall(img_url_pattern, tag)[0])
img_url_list.append(re.findall(img_url_pattern, tag)[0]) # 找到所有的img_url
if __name__ == "__main__":
main()
用IDM下载博客图片的更多相关文章
- Python 实用爬虫-04-使用 BeautifulSoup 去水印下载 CSDN 博客图片
Python 实用爬虫-04-使用 BeautifulSoup 去水印下载 CSDN 博客图片 其实没太大用,就是方便一些,因为现在各个平台之间的图片都不能共享,比如说在 CSDN 不能用简书的图片, ...
- hexo博客图片问题
hexo博客图片问题 第一步 首先确认_config.yml 中有 post_asset_folder:true. Hexo 提供了一种更方便管理 Asset 的设定:post_asset_folde ...
- Ruby:多线程队列(Queue)下载博客文章到本地
Ruby:多线程下载博客文章到本地的完整代码 #encoding:utf-8 require 'net/http' require 'thread' require 'open-uri' requir ...
- 利用Python进行博客图片压缩
自己写博客的时候常常要插入一些手机拍的照片,都是几M的大小,每张手动压缩太费事了,于是根据自己博客的排版特点用Python写了一个简单的图片压缩脚本,功能是将博客图片生成缩略图,横屏的图片压缩为宽度最 ...
- 博客图片失效?使用npm工具一次下载/替换所有失效的外链图片
前言 大约一个月前,微博的图片外链失效了,以及掘金因为盗链问题也于2019/06/06决定开启防盗链,造成的影响是:个人博客网站的引用了这些图片外链都不能显示. 目前微博和掘金的屏蔽,在CSDN和se ...
- 网易云免费OSS服务用做Markdown图床或博客图片外链
我使用据说是Windows下最好用的Markdown编辑器“MarkdownPad2”(个人感觉还是Visual Code+Markdown插件666)写Markdown,在贴图方面遇到一个问题,于是 ...
- 博客图片上传picgo工具安装配置github图传使用
摘要 对于每一个写博客的人来说,图片是至关重要.这一路经历了多次图片的烦恼,之前选择了微博个人文章那里粘贴图片的方式上传,感觉也挺方便的.但是由于新浪的图片显示问题,如果header中不设置 标签就不 ...
- 修正_typora文档复制到博客图片失效
开始 今天开始尝试使用 Typora 写markdown 然后复制到博客园,不过会有一个问题 那就是 typroa 插入的图片都是本地的,md文档复制到博客园之后,图片都失效了 通过百度,有工具可以直 ...
- Hexo 博客图片添加至图床---腾讯云COS图床使用。
个人博客:https://mmmmmm.me 源码:https://github.com/dataiyangu/dataiyangu.github.io 腾讯云官网 登录注册 创建存储桶 进入上面的存 ...
随机推荐
- Perl 数据类型:标量、数组、哈希
Perl 数据类型Perl 是一种弱类型语言,所以变量不需要指定类型,Perl 解释器会根据上下文自动选择匹配类型. Perl 有三个基本的数据类型:标量.数组.哈希.以下是这三种数据类型的说明: 序 ...
- selenium2 用selenium安装、加载、启用插件(一)
一:下载 下载地址是:http://docs.seleniumhq.org/download/
- pandas dataframe 满足条件的样本提取
pandas 的dataframe 对 数据查询可以通过3种方式 . 预备知识: 1. pandas 的索引和label都是从0开始的计数的 2. 时间切片都是左闭右开的. [5:6,:] 只会输出 ...
- XMLHttpRequest实现Ajax异步请求
一.XMLHttpRequest的方法 方法 描述 abort() ...
- 彻底清除Window7下的360注册表
当流氓360遇到强迫症,将注定有一场厮杀... 今天装了个虚拟机,其中win7系统是在网上随便下载了一个,是非纯净版的,自带了360在内的好多软件,其他软件都轻松删掉,但查看注册表时发现竟然有360残 ...
- How to safely shut down a loading UIWebView in viewWillDisappear?
up vote24down votefavorite 24 I have a view containing a UIWebView which is loading a google map (so ...
- (转)基于 WPF + Modern UI 的 公司OA小助手 开发总结
原文地址:http://www.cnblogs.com/rainlam163/p/3365181.html 前言: 距离上一篇博客,整整一个月的时间了.人不能懒下来,必须有个阶段性的总结,算是对我这个 ...
- Sublime for MacOS 使用技巧
1.创建软链接,使用命令直接打开sublime编辑器 ln -s "/Applications/Sublime Text.app/Contents/SharedSupport/bin/sub ...
- 关于Html5中的单选与多选
1.下拉列表样式: <select> <option value ="volvo">Volvo</option> <option valu ...
- jQuery bind() live()
<script type="text/javascript"> $(document).ready(function () { /*$('.clickme').live ...