python爬取網站上的圖片並保存到本地

  1.導入須要的模塊requests,BeautifulSoup,os(用於文件讀寫)。css

  2.建立一個類,並初始化。html

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.先請求圖片所在的網頁,返回網頁responsepython

    def request(self, url):  # 返回網頁response
        r = requests.get(url, self.headers)  # 向目標url地址發送get請求,返回一個response對象
        return r

  調用request方法,print(r.text)就能夠看到控制檯上print出的網頁源碼了。web

  4.經過BeautifulSoup工具獲取須要抓取的img標籤,這裏根據不一樣的網頁佈局css選擇器也會有不一樣:chrome

    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.接下來就能夠保存圖片了。flex

  第四步操做,在get_pic方法中,獲取到全部圖片所在的div標籤後,先確保存放圖片的文件下是否存在,調用方法url

  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
相關文章
相關標籤/搜索