python 圖片爬蟲抓取圖片系列二——爬取指定網頁中的圖片精細版

 

來自 《Python項目案例開發從入門到實戰》(清華大學出版社 鄭秋生 夏敏捷主編)中爬蟲應用——抓取百度圖片html

本文使用 request 庫來爬取某個網站的圖片,前面幾章博客介紹瞭如何使用 urllib 庫來抓取網頁,本文主要使用的是 request 庫來抓取網頁內容,使用方法基本一致,但 request 方法相對簡單一些正則表達式

爬蟲的基本思路別忘了:函數

1. 指定要抓取的連接而後抓取網站源代碼網站

2. 提取你想要的內容,好比你想要爬取圖片信息,能夠選擇用正則表達式過濾或者使用提取 <img /> 標籤的方法編碼

3. 循環獲得的要爬取內容列表,保存文件url

這裏的代碼和本人博客前幾章(圖片爬蟲系列一)的差別在於:spa

1. 提取網頁使用的是 reques 庫code

2. 保存圖片的時候後綴不固定使用 png 或者 jpg,而是使用圖片自己的後綴名htm

3. 保存圖片的時候不使用 urllib.request.urlretrieve 函數,而是使用文件的讀寫操做來保存圖片blog

具體代碼以下圖所示:

 1 # 使用requests、bs4庫下載華僑大學主頁上的全部圖片
 2 import os  3 import requests  4 from bs4 import BeautifulSoup  5 import shutil  6 from pathlib import Path  # 關於文件路徑操做的庫,這裏主要爲了獲得圖片後綴名
 7 
 8 
 9 # 該方法傳入url,返回url的html的源代碼
10 def getHtmlCode(url): 11     # 假裝請求的頭部來隱藏本身
12     headers = { 13         'User-Agent': 'MMozilla/5.0(Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0'
14  } 15     # 獲取網頁
16     r = requests.get(url, headers=headers) 17     # 指定網頁解析的編碼格式
18     r.encoding = 'UTF-8'
19     # 獲取url頁面的源代碼字符串文本
20     page = r.text 21     return page 22 
23 
24 # 該方法傳入html的源代碼,經過截取其中的img標籤,將圖片保存到本機
25 def getImg(page, localPath): 26     # 判斷文件夾是否存在,存在則刪除,最後都要從新新的文件夾
27     if os.path.exists(localPath): 28  shutil.rmtree(localPath) 29  os.mkdir(localPath) 30 
31     # 按照Html格式解析頁面
32     soup = BeautifulSoup(page, 'html.parser') 33     # 返回的是一個包含全部img標籤的列表
34     imgList = soup.find_all('img') 35     x = 0 36     # 循環url列表
37     for imgUrl in imgList: 38         try: 39             # 獲得img標籤中的src具體內容
40             imgUrl_src = imgUrl.get('src') 41             # 排除 src='' 的狀況
42             if imgUrl_src != '': 43                 print('正在下載第 %d : %s 張圖片' % (x+1, imgUrl_src)) 44                 # 判斷圖片是不是從絕對路徑https開始,具體爲何這樣操做能夠看下圖所示
45                 if "https://" not in imgUrl_src: 46                     m = 'https://www.hqu.edu.cn/' + imgUrl_src 47                     print('正在下載: %s' % m) 48                     # 獲取圖片
49                     ir = requests.get(m) 50                 else: 51                     ir = requests.get(imgUrl_src) 52                 # 設置Path變量,爲了使用Pahtlib庫中的方法提取後綴名
53                 p = Path(imgUrl_src) 54                 # 獲得後綴,返回的是如 '.jpg'
55                 p_suffix = p.suffix 56                 # 用write()方法寫入本地文件中,存儲的後綴名用原始的後綴名稱
57                 open(localPath + str(x) + p_suffix, 'wb').write(ir.content) 58                 x = x + 1
59         except: 60             continue
61 
62 
63 if __name__ == '__main__': 64     # 指定爬取圖片連接
65     url = 'https://www.hqu.edu.cn/index.htm'
66     # 指定存儲圖片路徑
67     localPath = './img/'
68     # 獲得網頁源代碼
69     page = getHtmlCode(url) 70     # 保存圖片
71     getImg(page, localPath)

 

注意,爲何判斷圖片鏈接是否從 "https://" 開始主要是由於咱們下載圖片須要完整的絕對路徑,而這個得來須要看原網頁代碼,選擇一張圖片,點擊 html 所在的代碼,鼠標放着,就能夠看到絕對路徑,而後根據這個絕對路徑設置須要添加的缺乏部分,以下圖所示:

 

相關文章
相關標籤/搜索