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

概要

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

实现

(1)请求对象定制

# 请求对象定制
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)获取网页源码

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

(3)解析并下载图片

# 下载
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')

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

from lxml import etree

完整代码

完整代码如下:

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.mzph.cn/pingmian/3733.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Open3D均值和中值滤波

一、代码 Python import open3d as o3d import numpy as npdef mean_filter(point_cloud, k=50):# 构建KDTreepcd_tree = o3d.geometry.KDTreeFlann(point_cloud)# 为每个点搜索k近邻points = np.asarray(point_cloud.points)filtered_points = np.zeros_like(points)for i i…

人生关卡设计:内在动力、外在挑战与成长路径的构建

人生被喻为一场旅程,其中充满了无数的关卡,这些关卡不仅是外在环境施加的挑战,更是个体内心动力驱动下自我设定的成长节点。本文旨在探讨人生关卡设计的概念,及其如何通过内在动力、外在挑战与成长路径的交织构建,塑造…

Linux + EC20 shell指令查看SIM卡信号强度

以A40i平台linux系统,移远EC20模块为例,看看如何查看SIM卡信号的强度: 命令: root$ cat /dev/ttyUSB2& root$ echo -e "ATCSQ\r\n" > /dev/ttyUSB2 得到: ATCSQ CSQ: 28,99 OK AATCSQ CSQ: 2…

python-excel自动化-openpyxl

openpyxl学习笔记 创建或打开表格存储和遍历数据设置单元格风格过滤器和排序更改工作表的背景颜色合并单元格冻结窗口数字格式公式图像图表条形图折线图散点图 创建或打开表格 # 创建 import datetime from openpyxl import Workbook # 实例化 wb Workbook() # 激活 work…

使用Excel生成sql脚本(insert/update/delete)

目录 前言 一、Excel文件脚本变量 二、操作示例 前言 在系统使用初期,存在某种原因,需要对数据库数据进行批量处理操作。往往都是通过制定Excel表格,通过Excel导入到数据库中,所以就弄一个excel生成sql的导入脚本,希…

vue3:组合式API和选项式API里分别如何使用store

vue3越来越主流了,但是很多人还不习惯vue3的组合式API写法,依旧喜欢用选项是API,但是很多功能的写法是不同的,比如我今天要分享的store写法。 我用的store是pinia。 选项式API(script里不带setup)的写法&…

3-Vuex状态管理

Vuex是一个专门为Vue.js应用程序开发的状态管理模式。它集中管理应用程序中的所有组件的状态,并提供了一种可预测的方式来修改和查询状态。 Vuex的核心概念包括: State(状态):应用程序的状态存储在一个单一的对象中&a…

探索设计模式的魅力:AI赋能分层模式,解构未来,智领风潮

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》 💪🏻 制定明确可量化的目标,坚持默默的做事。 探索设计模式的魅力:AI赋能分层模式,解构未来,智领风潮 ✨欢迎…

【网络安全】安全事件管理处置 — 安全事件处置思路指导

专栏文章索引:网络安全 有问题可私聊:QQ:3375119339 目录 一、处理DDOS事件 1.准备工作 2.预防工作 3.检测与分析 4.限制、消除 5.证据收集 二、处理恶意代码事件 1.准备 2.预防 3.检测与分析 4.限制 5.证据收集 6.消除与恢复 …

【Leetcode】vector刷题

🔥个人主页:Quitecoder 🔥专栏:Leetcode刷题 目录 1.只出现一次的数字2.杨辉三角3.删除有序数组中的重复项4.只出现一次的数字II5.只出现一次的数字III6.电话号码的字母组合 1.只出现一次的数字 题目链接:136.只出现一…

算法训练营day24

参考链接代码随想录 (programmercarl.com) 一、回溯算法基础 1.什么是回溯法? 回溯是递归的副产品,只要有递归就会有回溯。 2. 回溯法的效率 因为回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案,如果想让…

linux 编译opencv遇到问题

linux编译opencv4.8的时候遇到问题 Error: suffix or operands invalid for vpand看到很多说法是升级as这个工具的版本,自测是从2.20升级到2.27就可以了

【Flutter】webview_flutter使用详解

文章目录 前言一、如何使用 前言 webview_flutter是Flutter官方推出的一款用于Flutter上的webview插件,该插件在 iOS 用的是WKWebView 支持; 在 Android 上用的是系统WebView。 插件地址:https://pub.dev/packages/webview_flutter 一、如何…

python提取date的月份和天数

在Python编程中,经常需要从日期中提取月份和天数。这在数据处理、分析和可视化等领域都是非常常见的操作。 本文将介绍如何使用Python提取日期中的月份和天数,并通过代码示例展示具体的实现方法。 1.使用datetime模块获取日期信息 要提取日期的月份和天…

TypeScript 项目报错Projects must list all files or use an include pattern

文章目录 原因分析解决方案使用include和exclude使用files 总结 这条错误信息:“Projects must list all files or use an include pattern”通常与TypeScript项目的配置有关,特别是在处理 tsconfig.json文件时。这个错误提示你需要在 tsconfig.json中…

c++ vec3b运算

文章目录 1. 两个Vec3b点乘后相加求和&#xff1a;ddot()2. 两个Vec3b不同却相减为0 1. 两个Vec3b点乘后相加求和&#xff1a;ddot() Vec3b v1 img.at<Vec3b>(0, 0); Vec3b v2 img.at<Vec3b>(0, 1); cout << "v1:" << v1 << endl; …

安卓手机连接电脑实用技巧:实现文件传输与共享

在手机使用过程中&#xff0c;我们常常需要将手机中的文件传输到电脑&#xff0c;或者将手机与电脑进行共享。为了实现这一需求&#xff0c;掌握一些实用的安卓手机连接电脑技巧就显得尤为重要。本文将为您详细介绍2种简单、高效且安全的方法&#xff0c;让您轻松实现安卓手机与…

【Python系列】受保护属性

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Scala 04 —— Scala Puzzle 拓展

Scala 04 —— Scala Puzzle 拓展 文章目录 Scala 04 —— Scala Puzzle 拓展一、占位符二、模式匹配的变量和常量模式三、继承 成员声明的位置结果初始化顺序分析BMember 类BConstructor 类 四、缺省初始值与重载五、Scala的集合操作和集合类型保持一致性第一部分代码解释第二…

SSLHandshakeException: Remote host closed connection during handshake异常处理

请求第三方https接口出现SSLHandshakeException: Remote host closed connection during handshake问题&#xff0c;本地正常&#xff0c;服务器异常。原因是服务器jdk版本是jdk1.8_40 现阶段找到三个方案&#xff0c;第一个是jdk1.8_151版本 添加或者修改Java\jre\lib\securit…