假期在家无聊?一起用python下载高清4k壁纸吧(手动狗头)

本文详细介绍了使用Python爬虫从网站http://pic.netbian.com/4kdongman/抓取4K动漫图片的过程。首先讲解了XPath的基本用法,然后通过requests和lxml库获取并解析页面数据。接着,创建目标文件夹存储图片,并使用循环遍历每个图片链接,下载并保存。最后,扩展爬虫以爬取多页内容,实现了批量下载功能。注意处理中文乱码问题。
摘要由CSDN通过智能技术生成

爬取网站

在此,我先把网站奉上
http://pic.netbian.com/4kdongman/
我们爬取的是动漫图片,别的可以自行爬取哦

爬取的基本步骤

我们肯定要先导入包,这里我们用的是xpath爬取,所以需要的包有以下几个:

import requests
import os
from lxml import etree

我们首先先爬取页面的数据,我们可以鼠标右键点击检查查看图片具体在哪个位置
在这里插入图片描述
我们看到了他的标签有很多

xpath的简单介绍

我们先简单介绍一下xpath的简单用法:
xpath解析:最常见且最便捷高效的一种解析方式,通用
-xpath解析原理:
- 1.实例化一个etree对象,且需要将被解析的页面源码数据加载到该对象中
- 2.调用etree对象中的xpath方法结合着xpath表达式实现标签的定位和内容的捕获
- 环境安装:
- pip install lxml
- 如何实例化etree对象from lxml import etree
- 1.将本地的html文档中的源码数据加载到etree对象中
etree.parse(filePath)
- 2.将从互联网获取的源码数据加载到该对象中
etree.HTML(‘page_text’)
- xpath(‘xpath表达式(例如:/html/head/title)’)
- / 表示从根节点开始定位,表示一个层级
- // 表示多个层级,开始的化就是直接找到从任意位置开始定位
- 属性定位:xpath(’//div[@class=‘属性’] tag[@attrName = ‘attrValue]’)
- 索引定位xpath(’//div[@class=‘song’]/p[3]’)
- xpath(’//div[@class=‘tang’]//li[5]/a/text()’)[0]#返回文本数据,返回列表
- 取文本
- /text()直系文本
- //text()所有文本内容
-取树形
- /@attrName ==>img/2src
那我们直接进行爬取页面数据

headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
        }
url = 'http://pic.netbian.com/4kdongman/index.html'
response = requests.get(url, headers=headers)
pageText = response.text

海量4k图片我们需要创建一个文件夹来盛放啊(手动狗头)

#创建文件夹
if not os.path.exists('./picLibs'):
    os.mkdir('./picLibs')

路径可以自己选择。
之后我们需要创建一个xpath对象来进行查找数据吧,然后我们看到我们想要的网站在ul[@class=“clearfix”]/li里,那我们需要爬取所有里标签,然后li标签里的/img/@src是我们需要的,那我们开始工作吧!

for Img in pgImg:
    photo = 'http://pic.netbian.com' + Img.xpath('./a/img/@src')[0]
    photoName = Img.xpath('./a/img/@alt')[0] + '.jpg'
    #处理中文名称乱码的常用解决,我们会发现打印出来会乱码,不得不解决
    photoName = photoName.encode('iso-8859-1').decode('gbk')
    print(photo, photoName)

之后我们得到了网站之后就可以开启我们的图片爬取了!!!

    #请求图片
    imgData = requests.get(photo, headers=headers).content
    imgPath = r'C:/Users/谢迎博啊/PycharmProjects/pythonProject/python爬虫开发入门/数据解析/picLibs/' + photoName
    with open(imgPath, 'wb') as fp:
        fp.write(imgData)
        print(photoName, '下载成功')

但是我们才爬取一页啊,我们怎么忍心看着别的不拿啊!这时候我们就要对比网站了,先看第一页:http://pic.netbian.com/4kdongman/
第二页:http://pic.netbian.com/4kdongman/index_2.html
有点不一样啊,我们来看以下把2变成1可不可以打开呐?
在这里插入图片描述

很遗憾不可以,那我们只能分开了,另写一份:

for x in range(2, 147):
    url = 'http://pic.netbian.com/4kdongman/index_%d.html'%x
    response = requests.get(url, headers=headers)
    #手动设定响应数据编码
    # response.encoding = 'utf-8'
    pageText = response.text
    #创建文件夹
    if not os.path.exists('./picLibs'):
        os.mkdir('./picLibs')
    #数据解析
    tree = etree.HTML(pageText)
    pgImg = tree.xpath('//ul[@class="clearfix"]/li')
    for Img in pgImg:
        photo = 'http://pic.netbian.com' + Img.xpath('./a/img/@src')[0]
        photoName = Img.xpath('./a/img/@alt')[0] + '.jpg'
        #处理中文乱码的常用解决
        photoName = photoName.encode('iso-8859-1').decode('gbk')
        print(photo, photoName)
        #请求图片
        imgData = requests.get(photo, headers=headers).content
        imgPath = r'C:/Users/谢迎博啊/PycharmProjects/pythonProject/python爬虫开发入门/数据解析/picLibs/' + photoName
        with open(imgPath, 'wb') as fp:
            fp.write(imgData)
            print(photoName, '下载成功')

我爬取的只是动漫部分哦,其余部分可以自行爬取哦!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leosaf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值