python爬取網站上的圖片並儲存到本地
阿新 • • 發佈:2018-12-24
1.匯入需要的模組requests,BeautifulSoup,os(用於檔案讀寫)。
2.建立一個類,並初始化。
class BeautifulPicture: def __init__(self): # 類的初始化操作 self.headers = { # 給請求指定一個請求頭來模擬chrome瀏覽器 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64)' ' AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'} self.web_url = 'url' # 要訪問的網頁地址 self.folder_path = 'E:\\1\\pic' # 設定圖片要存放的檔案目錄
3.先請求圖片所在的網頁,返回網頁response
def request(self, url): # 返回網頁response r = requests.get(url, self.headers) # 向目標url地址傳送get請求,返回一個response物件 return r
呼叫request方法,print(r.text)就可以看到控制檯上print出的網頁原始碼了。
4.通過BeautifulSoup工具獲取需要抓取的img標籤,這裡根據不同的網頁佈局css選擇器也會有不同:
def get_pic(self): r = self.request(self.web_url) all_item = BeautifulSoup(r.text, 'html.parser').select(".search_results > .item") for item in all_item: img = item.find('a').find('img') url = img['src']
此處,我是先抓取img所在的div(類名為item),再獲取div下的a連結下的img,網頁具體程式碼格式為
<div class="flex_grid credits search_results" style="margin:4px 14px 0 15px"> <div class="item" data-w="640" data-h="256"> <a href=""> <img srcset="" src="" alt=""> </a> </div> ...... </div>
通過遍歷可以獲取所有圖片的連結。
5.獲取到圖片地址連結後,就可以下載圖片並儲存到本地了。那麼就需要確認初始化定義的資料夾是否存在,如果不存在,需要建立。
def mkdir(self, path): # 建立資料夾 path = path.strip() is_exists = os.path.exists(path) if not is_exists: print('建立名字叫做', path, '的資料夾') os.makedirs(path) print('建立成功!') else: print(path, '資料夾已經存在了,不再建立')
6.接下來就可以儲存圖片了。
第四步操作,在get_pic方法中,獲取到所有圖片所在的div標籤後,先確保存放圖片的檔案下是否存在,呼叫方法
self.mkdir(self.folder_path) # 建立資料夾
os.chdir(self.folder_path) # 切換路徑至上面建立的資料夾
遍歷所有的div,根據url名中jpg/png的不同,決定儲存圖片的字尾名
i = 1 # 後面用來給圖片命名 for item in all_item: img = item.find('a').find('img') url = img['src'] if url.count('jpg') > 0: self.save_img(url, str(i) + '.jpg') elif url.count('png') > 0: self.save_img(url, str(i) + '.png') i += 1
其中save_img方法為:
def save_img(self, url, name): # 儲存圖片 img = self.request(url) f = open(name, 'ab') f.write(img.content) print(name, '檔案儲存成功!') f.close()
建立MyBeautifulPicture類的例項,呼叫get_pic方法,至此,儲存圖片到本地就可以實現了。
完整的get_pic方法為:
def get_pic(self): r = self.request(self.web_url) all_item = BeautifulSoup(r.text, 'html.parser').select(".search_results > .item") self.mkdir(self.folder_path) # 建立資料夾 os.chdir(self.folder_path) # 切換路徑至上面建立的資料夾 i = 1 # 後面用來給圖片命名 for item in all_item: img = item.find('a').find('img') url = img['src'] # print(url) if url.count('jpg') > 0: self.save_img(url, str(i) + '.jpg') elif url.count('png') > 0: self.save_img(url, str(i) + '.png') i += 1