python利用urllib和xpath爬取并保存图片

embedded/2024/9/22 23:26:22/

概要

在网络时代,图片是信息传递的重要形式之一,而Python作为一种多用途的编程语言,可以用来编写爬虫从网页上获取图片,并保存到本地。本文将介绍如何使用Python爬虫实现这一功能,并探讨一些进阶技巧。

实现

(1)请求对象定制

python"># 请求对象定制
def create_request(page):if 1 == page:url = 'https://sc.chinaz.com/tupian/huacaotupian.html'else:url = 'https://sc.chinaz.com/tupian/huacaotupian_' + str(page) + '.html'# 防止UA(User-Agent)检查headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)'}request = urllib.request.Request(url=url, headers=headers)return request

(2)获取网页源码

python"># 获取网络源码
def get_content(request):response = urllib.request.urlopen(request)content = response.read().decode('utf-8')return content

(3)解析并下载图片

python"># 下载
def down_load(content):tree = etree.HTML(content)name_list = tree.xpath('//div[@class="container"]//div/div/img/@alt')img_list = tree.xpath('//div[@class="container"]//div/div/img/@data-original')# for i in range(len(name_list)):#     print('name', i)# for i in range(len(img_list)):#     print('src', i)for i in range(len(name_list)):urllib.request.urlretrieve(url= 'https:' + img_list[i], filename='./out_Data/img/' + name_list[i] + '.png')

解析网页源码这里用到了xpathxpath是lxml下的一个包,使用时,需要导入:

python">from lxml import etree

完整代码

完整代码如下:

python">import urllib.request
from lxml import etree# 分析页码之间的关系
# get请求
# https://sc.chinaz.com/tupian/huacaotupian.html  1
# https://sc.chinaz.com/tupian/huacaotupian_2.html 2
# https://sc.chinaz.com/tupian/huacaotupian_3.html  3
# https://sc.chinaz.com/tupian/huacaotupian_4.html  4# 请求对象定制
def create_request(page):if 1 == page:url = 'https://sc.chinaz.com/tupian/huacaotupian.html'else:url = 'https://sc.chinaz.com/tupian/huacaotupian_' + str(page) + '.html'# 防止UA(User-Agent)检查headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)'}request = urllib.request.Request(url=url, headers=headers)return request# 获取网络源码
def get_content(request):response = urllib.request.urlopen(request)content = response.read().decode('utf-8')return content# 下载
def down_load(content):tree = etree.HTML(content)name_list = tree.xpath('//div[@class="container"]//div/div/img/@alt')img_list = tree.xpath('//div[@class="container"]//div/div/img/@data-original')# for i in range(len(name_list)):#     print('name', i)# for i in range(len(img_list)):#     print('src', i)for i in range(len(name_list)):urllib.request.urlretrieve(url= 'https:' + img_list[i], filename='./out_Data/img/' + name_list[i] + '.png')if __name__ == '__main__':start_page = int(input('请输入起始页码: '))end_page = int(input('请输入截止页码: '))for page in range(start_page, end_page + 1):print('下载至第' + page + '页')# 请求对象定制request = create_request(page)# 获取网页源码content = get_content(request)# 下载数据down_load(content)


http://www.ppmy.cn/embedded/22846.html

相关文章

深度学习的炼金术:转化数据为黄金的秘密

深度学习的炼金术:转化数据为黄金的秘密 1 引言 在现代深度学习的壮阔疆域中,数据是王冠上耀眼的宝石,而性能优化则是锻造这顶王冠的炼金术。这份融合了数据和算法魔力的艺术,不仅仅依赖于强大的计算资源和复杂的网络结构&#x…

Mysql(数据库)知识详解【6】~{锁,架构}

数据库锁和架构是两个不同的概念,但它们都与数据库管理系统(DBMS)的性能和并发控制有关。 数据库锁: 数据库锁是一种同步机制,用于控制多个事务对共享资源的访问。锁可以确保数据的一致性和完整性,防止多个…

vscode 如何断点调试ros1工程

在vscode中断点调试ros1工程主要分为以下几步: 1. 第一步就是修改cmakelist.txt,到调试模式。 将CMAKE_BUILD_TYPE原来对应的代码注释掉,原来的一般都不是调试模式。加上下面一行代码,意思是设置调试模式。 # 断点调试 SET(CMAK…

Redis__数据类型

文章目录 😊 作者:Lion J 💖 主页: https://blog.csdn.net/weixin_69252724 🎉 主题:Redis__数据类型 ⏱️ 创作时间:2024年04月28日 ———————————————— 这里写目录标题 文…

react怎么制作选项卡

在React中制作选项卡(Tabs)是一个常见的需求,下面是一个简单的步骤和示例代码,用于创建一个基本的选项卡组件。 首先,我们需要定义选项卡组件的状态和结构。每个选项卡都有一个标签(label)和一…

HarmonyOS开发案例:【闹钟】

介绍 使用后台代理提醒,实现一个简易闹钟。要求完成以下功能: 展示指针表盘或数字时间。添加、修改和删除闹钟。展示闹钟列表,并可打开和关闭单个闹钟。闹钟到设定的时间后弹出提醒。将闹钟的定时数据保存到轻量级数据库。 相关概念 [Canva…

从零入门区块链和比特币(第二期)

欢迎来到我的区块链与比特币入门指南!如果你对区块链和比特币感兴趣,但不知道从何开始,那么你来对地方了。本博客将为你提供一个简明扼要的介绍,帮助你了解这个领域的基础知识,并引导你进一步探索这个激动人心的领域。…

微信小程序:11.本地生活小程序制作

开发工具: 微信开发者工具apifox进行创先Mock 项目初始化 新建小程序项目输入ID选择不使用云开发,js传统模版在project.private.config中setting配置项中配置checkinalidKey:false 梳理项目结构 因为该项目有三个tabbar所以我们要创建三…