一 前段時間自學了一段時間的Python,想著濃一點項目來練練手。看著大佬們一說就是爬了100W+的數據就非常的羡慕,不過對於我這種初學者來說,也就爬一爬圖片。 我相信很多人的第一個爬蟲程式都是爬去貼吧的圖片,嗯,我平時不玩貼吧,加上我覺得豆瓣挺良心的,我就爬了豆瓣首頁上面的圖片。其實最剛開始是想爬 ...
一
前段時間自學了一段時間的Python,想著濃一點項目來練練手。看著大佬們一說就是爬了100W+的數據就非常的羡慕,不過對於我這種初學者來說,也就爬一爬圖片。
我相信很多人的第一個爬蟲程式都是爬去貼吧的圖片,嗯,我平時不玩貼吧,加上我覺得豆瓣挺良心的,我就爬了豆瓣首頁上面的圖片。其實最剛開始是想爬全站,後來一想我這簡直是腦子犯抽,全站的圖片爬下來得有多少,再說這個只是練一下手,所以就只爬取了首頁上的圖片。廢話不多說 開始代碼。
首先是主文件的代碼:
1 import re 2 from html_downloder import HtmlDownloader 3 from html_downloder import Image 4 5 "'起始URL'" 6 url = "https://www.douban.com" 7 "'保存目錄'" 8 image_path = "F:\source\Python\爬蟲\ImageGet\Image%s.jpg" 9 "'定義實體類'" 10 downloader = HtmlDownloader() 11 html = downloader.download(url) 12 "'SaveFile(html, html_path)'" 13 html = html.decode('utf-8') 14 "'正則表達式'" 15 reg1 = r'="(https://img[\S]*?[jpg|png])"' 16 "'提取圖片的URL'" 17 dbdata = re.findall(reg1, html) 18 imgsave = Image() 19 20 "'下載保存圖片'" 21 imgsave.ImageGet(dbdata, image_path)
我們打開豆瓣首頁然後看一下裡面圖片的url會發現
都是以“=”等號開頭,後面接雙引號,中間都是https://img,末尾以雙引號結束。
因此我們的正則表達式可以寫成 reg1 = r'="(https://img[\S]*?[jpg|png])"'
在這個表達式中"[]"中括弧裡面的東西會作為一個整體,其中[\S]表示大小寫字母和數字,[jpg|png]表示以png結尾或者jpg結尾(在這次爬蟲中並沒有包括gif,因為打開gif的url發現是空白)。
然後是html_downloder.py的代碼:
1 # file: html_downloader.py 2 3 import urllib.request 4 import urllib.error 5 import time 6 7 8 class HtmlDownloader(object): 9 def download(self, url): 10 if url is None: 11 return None 12 try: 13 header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64)'} 14 "'發出請求'" 15 request = urllib.request.Request(url=url, headers=header) 16 "'獲取結果'" 17 response = urllib.request.urlopen(url) 18 except urllib.error.URLError as e: 19 if hasattr(e, "code"): 20 print(e.code) 21 if hasattr(e, "reason"): 22 print(e.reason) 23 if response.getcode() != 200: 24 return None 25 html = response.read() 26 response.close() 27 return html 28 29 30 class Image (object): 31 def ImageGet(self, imageurl, image_path): 32 x = 0 33 for li in imageurl: 34 urllib.request.urlretrieve(li, image_path % x) 35 x = x + 1 36 "'休眠5s以免給伺服器造成嚴重負擔'" 37 time.sleep(5)
這個文件的代碼主要是負責下載html網頁和下載具體的圖片。
接下來就可以在保存路徑對應的文件夾中中看到下載的圖片了
至此,爬蟲告一段落,離大佬的路還遠得很,繼續加油!!