千圖網爬圖片(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張圖沒什麼必要寫爬蟲,手動都下載完了。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

相關文章
相關標籤/搜索