使用Python和lxml从豆瓣下载图片

在这篇文章中,我将向你展示如何使用Python和lxml库从豆瓣网站下载图片。我们将使用requests库来发送HTTP请求,使用lxml库来解析HTML文档,并使用os库来处理文件和目录。

1.python和xml介绍

Python 是一种高层次的结合了解释性、编译性、互动性和面向对象的脚本语言1。Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构1。Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节1。Python 是交互式语言: 这意味着,您可以在一个 Python 提示符 >>> 后直接执行代码1。Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术1。Python 是初学者的语言: Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏1。

XML(eXtensible Markup Language)是一种标记语言,是从标准通用标记语言(SGML)中简化修改出来的2。XML 被设计用来传输和存储数据2。XML 指可扩展标记语言(eXtensible Markup Language)。可扩展标记语言(英语:Extensible Markup Language,简称:XML)是一种标记语言,是从标准通用标记语言(SGML)中简化修改出来的2。它主要用到的有可扩展标记语言、可扩展样式语言(XSL)、XBRL和XPath等2。
python和xml关系图谱
从这个图中,你可以看到 Python 和 XML 之间有三种主要的解析方式:ElementTree,SAX 和 DOM1。ElementTree 是一种轻量级的 DOM,它提供了一些简单而有效的 API 来操作 XML 数据2。SAX 是一种基于事件驱动的 API,它通过触发回调函数来处理 XML 数据1。DOM 是一种将 XML 数据在内存中解析成一个树的 API,它可以对树进行各种操作1。

每种解析方式都有自己的优缺点,你可以根据你的需求和场景来选择合适的方式。一般来说,ElementTree 比较适合处理简单和小型的 XML 文件,SAX 比较适合处理大型和复杂的 XML 文件,DOM 比较适合处理需要频繁修改的 XML 文件3。

Python 还提供了一些函数和类来创建和操作 XML 元素,如 parse,fromstring,write,tostring,Element 等2。这些函数和类可以让你方便地读取,修改,生成和输出 XML 数据。你可以通过这些函数和类的属性和方法来访问和操作 XML 元素的标签,属性,文本,子元素等2。

我希望这个关系图谱能够帮助你更好地理解 Python 和 XML 的关系。

2.爬取网站信息

当我们在豆瓣看到喜欢的图片时,想下载下来收藏,很多图片一个一个下载很麻烦。我们就可以用python帮我批量下载,可以节省很多时间。
我们就要以周星驰 Stephen Chow的图片为例:https://movie.douban.com/celebrity/1048026/photos/?type=C&start=
在这里插入图片描述

3.代码流程图

Created with Raphaël 2.3.0 开始 导入必要的库 创建一个文件夹 构造URL并发送请求 解析HTML文档 下载并保存图片

4.编写代码

  1. 首先,我们需要导入必要的库:
import requests
from lxml import etree
import os
  1. 然后,我们创建一个名为’images’的文件夹来保存下载的图片:
if not os.path.exists('images'):
    os.mkdir('images')

3.找到XPath获取图片的URL
在这里插入图片描述

  1. 接下来,我们将循环爬取5页的图片:
for i in range(5):
    url = f"https://movie.douban.com/celebrity/1048026/photos/?type=C&start={i * 30}&sortby=like&size=a&subtype=a"
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
    }
    response = requests.get(url, headers=headers)
    page_text = response.text
    tree = etree.HTML(page_text)
    img_src_list = tree.xpath('//ul[@class="poster-col3 clearfix"]/li/div/a/img/@src')

  1. 最后,我们下载图片并保存到’images’文件夹中:
for src in img_src_list:
    img_data = requests.get(src, headers=headers).content
    img_name = src.split('/')[-1]
    img_path = 'images/' + img_name
    with open(img_path, 'wb') as fp:
        fp.write(img_data)
        print(img_name, '下载成功!')

6.运行后查看文件夹中的图片
在这里插入图片描述
在这里插入图片描述图片下载成功👌

  • 完整代码
import requests  # 导入requests库,用于发送HTTP请求
from lxml import etree  # 导入lxml库的etree模块,用于解析HTML文档
import os  # 导入os库,用于处理文件和目录

# 检查是否存在名为'images'的文件夹,如果不存在,则创建一个
if not os.path.exists('images'):
    os.mkdir('images')

# 循环爬取5页的图片
for i in range(5):
    # 构造URL,其中i * 30是图片的起始位置
    url = f"https://movie.douban.com/celebrity/1048026/photos/?type=C&start={i * 30}&sortby=like&size=a&subtype=a"
    # 定义请求头,伪装成浏览器访问
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
    }

    # 发送GET请求,获取网页内容
    response = requests.get(url, headers=headers)
    # 获取网页的文本内容
    page_text = response.text

    # 使用lxml进行数据解析
    tree = etree.HTML(page_text)
    # 使用XPath获取图片的URL
    img_src_list = tree.xpath('//ul[@class="poster-col3 clearfix"]/li/div/a/img/@src')

    # 下载图片
    for src in img_src_list:
        # 发送GET请求,获取图片数据
        img_data = requests.get(src, headers=headers).content
        # 从URL中获取图片的名称
        img_name = src.split('/')[-1]
        # 构造图片的路径
        img_path = 'images/' + img_name
        # 打开文件,并以二进制写入模式
        with open(img_path, 'wb') as fp:
            # 将图片数据写入文件
            fp.write(img_data)
            # 打印下载成功的消息
            print(img_name, '下载成功!')

你想要了解 Python 和 XML 的关系吗?Python 是一种流行的编程语言,XML 是一种可扩展的标记语言,它们都可以用来处理数据。Python 有三种方法解析 XML,分别是 SAX,DOM 和 ElementTree1。你可以通过以下的链接来学习更多的内容:
1.八爪鱼采集器官网学习基础不好的也是可以通过八爪鱼爬取资源的。
2.python解析XML-CSDN博客
3.Python 进阶(八):XML 基本操作
我希望这些信息对你有帮助

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值