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


 

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

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

爬蟲的基本思路別忘了:

1. 指定要抓取的鏈接然后抓取網站源代碼

2. 提取你想要的內容,比如你想要爬取圖片信息,可以選擇用正則表達式過濾或者使用提取 <img /> 標簽的方法

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

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

1. 提取網頁使用的是 requests 庫

2. 保存圖片的時候后綴不固定使用 png 或者 jpg,而是使用圖片本身的后綴名

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

具體代碼如下圖所示:

 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 所在的代碼,鼠標放着,就可以看到絕對路徑,然后根據這個絕對路徑設置需要添加的缺少部分,如下圖所示:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM