Python爬虫-14-案例:爬取手机壁纸网址所有图片(二)

前提

基于前一篇的爬取结果,图片是下载下来了,但是有一个问题是,每张图片都很小

如截图,打开后是这样的,本篇继续优化,起码保证下载下来的图片可以正常使用哈

Python爬虫-14-案例:爬取手机壁纸网址所有图片(二)_第1张图片

 

 分析

1)打开图片页面后,发现上面有尺寸显示,不同尺寸大小不同

2)右击查看我们这里下载的都是默认的120*90的大小

3)思考:将这里的尺寸直接替换成我们想要的即可,我这里选的是640*960(在页面看这个尺寸大小适中,反正就是取了一个差不多的)

 

代码优化

只需要在最后下载的时候将图片的url中120*90替换成我们想要的尺寸640*960即可

for img_url in img_url_list:
    img_url = img_url.replace("120x90","640x960")
    img_res = self.s.get(img_url,headers=self.headers)
    img_name = img_url.split("/")[-1]
    with open("%s/%s"%(save_path,img_name),"wb") as f:
        f.write(img_res.content)
        print("%s正在下载"%img_name)

 

完整代码

# coding:utf-8
import os
import requests
from lxml import etree

cur_path = os.path.dirname(__file__)
file_path = os.path.join(cur_path,"image")
if not os.path.exists(file_path):os.mkdir(file_path)

class LoadImage():

    def __init__(self,page_num=1,base_url="http://sj.zol.com.cn/bizhi/new_%d.html"):
        """
        :param base_url: 爬取网页的url
        :param page_num: 爬取第几页数
        """
        # 这个网站貌似没有做什么限制,不加headers也是可以的,可以直接请求,以免爬取数据有限制,这里我加上了
        self.s = requests.session()
        self.headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36",
            "Upgrade-Insecure-Requests":"1"
        }

        self.base_url = base_url
        self.page_num = page_num

    def load_page(self):
        url = (self.base_url)%self.page_num  # 我们的请求地址进行拼接
        res = self.s.get(url,headers=self.headers).text  # 获取网页
        html = etree.HTML(res)  # 使用lxml转换为html格式的数据
        index_links = html.xpath("//div/ul[1]/li/a[@class='pic']/@href")  # 获取页面url
        file_titles = html.xpath("//li[@class='photo-list-padding']/a[@class='pic']/@title")  # 获取页面图片库名称
        return index_links,file_titles

    def load_image(self):
        index_link,file_titles = self.load_page()
        url_and_title = zip(index_link,file_titles)  # 将返回的数据一一对应,下标0为图片库url,1为标题
        for u_t in url_and_title:
            save_path = os.path.join(file_path,u_t[1])  # 将标题与文件存放路径image拼接,后期爬取的图片会存放在对应目录下
            if os.path.exists(save_path): # 判断目录是否存在,存在就创建文件名(1)
                os.mkdir("%s(1)" % save_path)
            else:  # 否则就创建这个目录
                os.mkdir(save_path)

            res_url = "http://sj.zol.com.cn%s"%u_t[0]  # 页面上获取的图片链接仅为路径,这里需要url拼接
            res = self.s.get(res_url,headers=self.headers).text
            html = etree.HTML(res)
            img_url_list = html.xpath("//ul[@id='showImg']/li/a/img/@src")   # 获取src属性的图片下载链接jpg结尾的
            img_url_list.extend(html.xpath("//ul[@id='showImg']/li/a/img/@srcs")) # 获取srcs属性的图片链接并添加到列表后

            for img_url in img_url_list:  # 循环图片链接列表,依次写入文件中去
                img_url = img_url.replace("120x90","640x960")
                img_res = self.s.get(img_url,headers=self.headers)
                img_name = img_url.split("/")[-1]  # 图片名称
                with open("%s/%s"%(save_path,img_name),"wb") as f:
                    f.write(img_res.content)
                    print("%s正在下载"%img_name)

if __name__ == '__main__':

    for i in range(1,5): # 直接下载第1页到第4页的图片
        lo_img = LoadImage(page_num=i)
        lo_img.load_image()

执行脚本

Python爬虫-14-案例:爬取手机壁纸网址所有图片(二)_第2张图片

随便打开一张图查看,这样就完美啦,嘿嘿

Python爬虫-14-案例:爬取手机壁纸网址所有图片(二)_第3张图片

至此,下载图片大小问题解决

你可能感兴趣的:(Python爬虫)