在这篇文章中,我将向你展示如何使用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 之间有三种主要的解析方式: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.代码流程图
4.编写代码
- 首先,我们需要导入必要的库:
import requests
from lxml import etree
import os
- 然后,我们创建一个名为’images’的文件夹来保存下载的图片:
if not os.path.exists('images'):
os.mkdir('images')
3.找到XPath获取图片的URL
- 接下来,我们将循环爬取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')
- 最后,我们下载图片并保存到’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 基本操作
我希望这些信息对你有帮助