其實沒太大用,就是方便一些,由於如今各個平臺之間的圖片都不能共享,好比說在 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
原文出處:https://www.cnblogs.com/xpwi/p/11029392.htmlapp