其實沒太大用,就是方便一些,由於如今各個平臺之間的圖片都不能共享,好比說在 CSDN 不能用簡書的圖片,在博客園不能用 CSDN 的圖片。 當前想到的方案就是:先把 CSDN 上的圖片都下載下來,再手動更新吧。 因此簡單寫了一個爬蟲用來下載 CSDN 平臺上的圖片,用於在其餘平臺上更新圖片時用html
更多內容,請看代碼註釋java
提示: 須要先下載 BeautifulSoup 哦,能夠用 pip,也能夠直接在 PyCharm 中安裝 簡單的方法:數組
# coding:utf-8
''' 使用爬蟲下載圖片: 1.使用 CSDN 博客 2.獲取圖片鏈接,並下載圖片 3.可去除水印 做者:java997.com '''
import re
from urllib import request
from bs4 import BeautifulSoup
import datetime
# 構造無水印純連接數組
def get_url_array(all_img_href):
img_urls = []
for h in all_img_href:
# 去掉水印
if re.findall("(.*?)\?", h[1]):
h = re.findall("(.*?)\?", h[1])
# 由於這裏匹配就只有 src 了, 因此直接用 0
img_urls.append(h[0])
else:
# 由於這裏尚未處理有 alt 的狀況, 因此直接用 1
img_urls.append(h[1])
return img_urls
# 構建新目錄的方法
def mkdir(path):
# 引入模塊
import os
# 去除首位空格
path = path.strip()
# 去除尾部 \ 符號
path = path.rstrip("\\")
# 判斷路徑是否存在
# 存在 True
# 不存在 False
isExists = os.path.exists(path)
# 判斷結果
if not isExists:
# 若是不存在則建立目錄
# 建立目錄操做函數
os.makedirs(path)
print('目錄 ' + path + ' 建立成功')
return True
else:
# 若是目錄存在則不建立,並提示目錄已存在
print('目錄 ' + path + ' 已存在')
return False
if __name__ == '__main__':
# url = input("請粘貼博客連接")
url = "https://blog.csdn.net/qq_40147863/article/details/90484190"
# 獲取頁面 html
rsp = request.urlopen(url)
all_html = rsp.read()
# 一鍋清湯
soup = BeautifulSoup(all_html, 'lxml')
# bs 自動解碼
content = soup.prettify()
# 獲取標題
tags = soup.find_all(name='title')
for i in tags:
# .string 是去掉標籤, 只打印內容
print(i.string)
# 獲取正文部分
article = soup.find_all(name='article')
# print(article[0])
# 獲取圖片的連接
all_img_href = re.findall('<img(.*?)src="(.*?)"', str(article))
# 調用函數, 獲取去掉水印後的連接數組
img_urls = get_url_array(all_img_href);
# 用當前之間爲目錄名, 建立新目錄
now_time = datetime.datetime.now()
now_time_str = datetime.datetime.strftime(now_time, '%Y_%m_%d_%H_%M_%S')
mkdir(now_time_str)
print("----------下載圖片-------------")
i = 0
for m in img_urls:
# 因爲沒有精確匹配,並非全部鏈接都是咱們要的課程的鏈接,排出第一張圖片
print('正在下載第' + str(i) + '張:' + m)
# 爬取每一個網頁圖片的鏈接
img_url = request.urlopen(m).read()
# img 目錄【必須手動建立好】
fp = open(now_time_str+'\\' + str(i) + '.jpg', 'wb')
# 寫入本地文件
fp.write(img_url)
# 目前沒有想到更好的方式,暫時只能寫一次,關閉一次,若是有更好的歡迎討論
fp.close()
i += 1
複製代碼