Python爬取4K图片

今天,我们用Python来爬取4K图片的数据,并保存图片。
首先打开网址:http://pic.netbian.com/4kfengjing/
在这里插入图片描述打开F12开发者工具,elements栏中定位到图片信息。其中我们可以看出,所有的图片信息都是在一个< div>标签中,并且该div拥有属性class=“slist”,每一个< li >标签内容对应一张图片信息,只要从< li >标签信息中获取到src属性值、alt属性值即可当做图片的名称和访问地址:
src="/uploads/allimg/180325/192357-1521977037fd66.jpg",
alt=“劳特布龙嫩山谷4k壁纸”。
在这里插入图片描述地址其中一张图片,发现图片访问地址为:http://pic.netbian.com/uploads/allimg/180325/192357-1521977037fd66.jpg,比我们之前获得的src要多出一部分字符串“http://pic.netbian.com”,这里我们需要用到字符串的拼接,组成一个完整的图片下载地址
在这里插入图片描述
图片下载成功后,存储到本地文件夹中保存。
实现代码如下:

import requests
from lxml import etree
import os

if __name__=="__main__":
    # URL地址
    url = 'http://pic.netbian.com/4kfengjing/'
    headers = {
        'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36'
    }
    # 创建文件夹保存图片数据
    if not os.path.exists('./data/4kPic'):
        os.mkdir('./data/4kPic')

    # 爬取页面源数据
    response = requests.get(url=url,headers=headers)
    # response.encoding = 'gbk'
    page_text = response.text

    # 数据解析:src属性值、alt属性值
    tree = etree.HTML(page_text)
    li_list = tree.xpath('//div[@class="slist"]/ul/li')
    for li in li_list:
        # 获取图片的src属性值
        img_src = 'http://pic.netbian.com/'+ li.xpath('./a/img/@src')[0]
        # 获取图片的alt属性值
        img_name = li.xpath('./a/img/@alt')[0]+'.jpg'
        img_name = img_name.encode('iso-8859-1').decode('gbk')

        # print(img_name,img_src)

        # 访问图片地址
        img_data = requests.get(url=img_src,headers=headers).content
        # 持久化存储图片数据
        img_path = 'data/4kPic/'+img_name
        with open(img_path,'wb') as fp:
            fp.write(img_data)
            print(img_name,'打印成功!!!')

运行结果如下:
在这里插入图片描述当前页面的图片爬取成功后,如果想要爬取所有页面的图片该如何操作了?比如这里总共有190页的数据
在这里插入图片描述
我们先尝试一下翻页,看看页面URL变化
在这里插入图片描述
URL的地址变成http://pic.netbian.com/4kfengjing/index_3.html,那么我们是不是只要把index_后面的数字参数化,然后循环抓取页面的数据就可以了。这里我们可以使用一个for循环来获取页数,然后填入URL地址中就可以了,代码实现如下:

    url = 'http://pic.netbian.com/4kfengjing/index_%d.html'
    for pageNum in range(1,191):
        new_url = format(url%pageNum)

下面显示所有代码:

import requests
from lxml import etree
import os

if __name__=="__main__":
    # URL地址
    # url = 'http://pic.netbian.com/4kfengjing/'
    # 创建文件夹保存图片数据
    if not os.path.exists('./data/4kPic'):
        os.mkdir('./data/4kPic')

    url = 'http://pic.netbian.com/4kfengjing/index_%d.html'
    for pageNum in range(1,191):
        new_url = format(url%pageNum)

        headers = {
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36'
        }

        # 爬取页面源数据
        response = requests.get(url=new_url, headers=headers)
        # response.encoding = 'gbk'
        page_text = response.text

        # 数据解析:src属性值、alt属性值
        tree = etree.HTML(page_text)
        li_list = tree.xpath('//div[@class="slist"]/ul/li')
        for li in li_list:
            # 获取图片的src属性值
            img_src = 'http://pic.netbian.com/' + li.xpath('./a/img/@src')[0]
            # 获取图片的alt属性值
            img_name = li.xpath('./a/img/@alt')[0] + '.jpg'
            img_name = img_name.encode('iso-8859-1').decode('gbk')

            # print(img_name,img_src)

            # 访问图片地址
            img_data = requests.get(url=img_src, headers=headers).content
            # 持久化存储图片数据
            img_path = 'data/4kPic/' + img_name
            with open(img_path, 'wb') as fp:
                fp.write(img_data)
                print(img_name, '打印成功!!!')

运行结果如下:
在这里插入图片描述所有图片都保存到文件夹4kPic中
在这里插入图片描述现在我们使用Python爬取页面所有4K图片的需求算是实现了!!!

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值