來自 《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 所在的代碼,鼠標放着,就能夠看到絕對路徑,而後根據這個絕對路徑設置須要添加的缺乏部分,以下圖所示: