千图网爬图片(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

猜你喜欢

转载自www.cnblogs.com/10sxluo/p/10251297.html
今日推荐