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張圖沒什麼必要寫爬蟲,手動都下載完了。html
下面寫一下這個爬蟲的一些關鍵點:python
1、圖片URL所在位置:包含在屬性class是lazy的IMG標籤內,data-original內。ide
2、圖片的URL須要進行文本處理,有些須要,有些不須要,要寫個if判斷。函數
3、圖片保存的時候,在命名時要注意,後綴除了JPG之外,還有PNG,個人處理是加多了一個保存PNG的類。url
踩的一些坑:spa
1、邏輯主體裏面,有時在sublime text複製來複制去的時候,前面沒有了空格,python會報錯,只有前面是實線時,纔是正確的,圓點是會報錯的。code
2、URL必須帶「http://」否則requests沒法識別,或者文本處理後的URL有誤,都會報錯:requests.exceptions.MissingSchema: Invalid URLxml