1. 程式人生 > >千圖網爬圖片(BeautifulSoup)

千圖網爬圖片(BeautifulSoup)

import requests 
from bs4 import BeautifulSoup
import os  #匯入os模組


class TuKuSpider():
    """docstring for TuKuSpider"""
    def __init__(self):
        self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'}
        self.url
='http://588ku.com/tuku/jiepai.html' self.folder_path='E:\TuKuImg' def get_img_url(self): print('開始請求頁面') init_response = self.request(self.url) all_img = BeautifulSoup(init_response.text,'lxml').find_all('img',class_='lazy') print('開始建立資料夾') self.mkdir(self.folder_path)
#建立資料夾 print('開始切換資料夾') os.chdir(self.folder_path) #切換路徑至上面建立的資料夾 for each in all_img: img_url = each.get('data-original') img_name = each.get('alt') if img_name == None: img_name = 'NoName' if img_url[-3:]=='
png': img_url_final = 'http:'+img_url img_response = self.request(img_url_final) self.save_png(img_url_final,img_name) else: img_url = img_url[:img_url.index('.jpg')+4] img_url_final = 'http:'+img_url img_response = self.request(img_url_final) self.save_jpg(img_url_final,img_name) def request(self,url): r=requests.get(url,headers=self.headers) return r def save_jpg(self, url, name): ##儲存圖片 print('開始請求圖片地址,過程會有點長...') img = self.request(url) file_name = name + '.jpg' print('開始儲存圖片') f = open(file_name, 'ab') f.write(img.content) print(file_name,'圖片儲存成功!') f.close() def save_png(self, url, name): ##儲存圖片 print('開始請求圖片地址,過程會有點長...') img = self.request(url) file_name = name + '.png' print('開始儲存圖片') f = open(file_name, 'ab') f.write(img.content) print(file_name,'圖片儲存成功!') f.close() def mkdir(self, path): ##這個函式建立資料夾 path = path.strip() isExists = os.path.exists(path) if not isExists: print('建立名字叫做', path, '的資料夾') os.makedirs(path) print('建立成功!') else: print(path, '資料夾已經存在了,不再建立') a = TuKuSpider() a.get_img_url()

 

這個是針對千圖網裡面,搜尋“街拍”彈出的結果進行一個爬蟲編寫。純粹是為了練習,只爬15張圖沒什麼必要寫爬蟲,手動都下載完了。

下面寫一下這個爬蟲的一些關鍵點:

一、圖片URL所在位置:包含在屬性class是lazy的IMG標籤內,data-original內。

二、圖片的URL需要進行文字處理,有些需要,有些不需要,要寫個if判斷。

三、圖片儲存的時候,在命名時要注意,字尾除了JPG以外,還有PNG,我的處理是加多了一個儲存PNG的類。

 

踩的一些坑:

一、邏輯主體裡面,有時在sublime text複製來複制去的時候,前面沒有了空格,python會報錯,只有前面是實線時,才是正確的,圓點是會報錯的。

 

二、URL必須帶“http://”不然requests無法識別,或者文字處理後的URL有誤,都會報錯:requests.exceptions.MissingSchema: Invalid URL