Python爬虫从入门到精通:(9)数据解析_xpath解析2_爬取4K高清动漫图片_Python涛哥

45 篇文章 18 订阅

使用xpath爬取4K高清动漫图片名称和图片数据
在这里插入图片描述

爬取当前页:

# 创建文件夹 存储图片
dirName = 'GirlsLib'
if not os.path.exists(dirName):
    os.mkdir(dirName)

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

url = 'https://pic.netbian.com/4kdongman/'
response = requests.get(url=url, headers=headers)
response.encoding = 'gbk'  # 页面的编码是gbk
page_text = response.text

# 解析图片名称+图片数据
tree = etree.HTML(page_text)

然后我们来分析下:
在这里插入图片描述

打开浏览器抓包工具,我们可以定位到图片 存储的到的指定的<li>标签

这段代码前我们需要用到 局部数据解析,什么是局部数据分析呢?

先看下代码:

li_list = tree.xpath('//div[@class="slist"]/ul/li')

for li in li_list:
    type(li)  # li的数据类型和tree的数据类型一样(<class 'lxml.etree._Element'>),那么li也可以调用xpath方法
    
    title = li.xpath('./a/img/@alt')[0] + '.jpg'  # 进行局部数据解析.返回的是列表,所以这里这[0]    
    img_src = 'https://pic.netbian.com' + li.xpath('./a/img/@src')[0]  
    
    img_data = requests.get(img_src, headers=headers).content
    imgPath = dirName + '/' + title
    with open(imgPath, 'wb') as f:
        f.write(img_data)
        print(title + '保存成功!!!')

步骤说明:

存储的是定位到的指定的<li>标签

局部数据解析:

  • 我们要将定位到的页面中的标签作为待解析的数据。再次使用xpath表达式解析的数据
  • 在局部数据解析的时候,xpath表达式中药使用./的操作,./表示的就是当前的局部数据(xpath的调用者)

这样,我们就完整提取出图片名称和图片地址了。


爬取多页(5页):

我们看到第二页的url:

ulr=https://pic.netbian.com/4kdongman/index_2.html

很容易知道分页都是index_d 的

这样,定义一个通用的url模板,

可以利用format函数来实现。

但我们发现 第一页和第二页的url不同,所以还是要加个判断。

for page in range(1, 6):
    if page == 1:
        new_url = 'http://pic.netbian.com/4kdongman/'
    else:
        new_url = format(url % page)

后续的操作就可以复制之前的代码加进循环里,就可以实现多页下载了!

分享小技巧:xpath表达式也可以在浏览器抓包工具里复制的
在这里插入图片描述


完整代码如下:

import os
import requests
from lxml import etree

# 创建保存路径
dirName = 'GirlsLib'
if not os.path.exists(dirName):
    os.mkdir(dirName)
    
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36'
}

url = 'https://pic.netbian.com/4kdongman/index_%d.html'

for page in range(1, 6):
    if page == 1:
        new_url = 'http://pic.netbian.com/4kdongman/'
    else:
        new_url = format(url % page)

    # 复制之前的代码加进循环里
    response = requests.get(url=new_url, headers=headers)
    response.encoding = 'gbk'
    page_text = response.text

    tree = etree.HTML(page_text)
    li_list = tree.xpath('//div[@class="slist"]/ul/li')

    for li in li_list:
        title = li.xpath('./a/img/@alt')[0] + '.jpg' 
        img_src = 'https://pic.netbian.com' + li.xpath('./a/img/@src')[0]
        img_data = requests.get(img_src, headers=headers).content
        imgPath = dirName + '/' + title
        with open(imgPath, 'wb') as f:
            f.write(img_data)
            print(title + '保存成功!!!')

运行后,唯美又可爱的动漫小姐姐就下载到电脑了!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值