python爬虫实战零基础(2)——网页图片

news2024/11/23 22:16:40

网页图片的批量爬取保存

  • 分析思路
  • 预备知识
    • xpath用法
    • response.text和 response.content两者的区别
  • 代码实战
    • 请求网页内容
    • 批量图片保存

分析思路

还是基于request和xpath的爬虫代码

  • 定位目标网址(里面图片还是很好看的 https://pic.netbian.com/4kdongman/index.html)
  • 分析网页结构,找到目标图片网址
  • request请求网址,xpath获取地址和名称
  • 批量下载并保存到本地

嗯,逻辑清楚

预备知识

xpath用法

选择某个标签,使用 /,也可以多层查找,如/html/body/h2
获取所有信息,使用 //,如//p,将p标签的所有信息都提取出来
获取文本内容:text()
获取注释:comment()
获取其它任何属性:@xx,如:@href、@src、@title

更多详细的语法可以看这个,很清楚的讲解
xpath语法基础

response.text和 response.content两者的区别

requests对象的get和post方法都会返回一个Response对象, 这个对象里面存的是服务器返回的所有信息,包括响应头,响应状态码等。其中返回的网页部分会存在.content和.text 两个对象中

两者区别在于:

  • content中间存的是字节流数据 ,
  • text中存的是根据requests模块自己猜测的编码方式将content内容编码成Unicode

我们使用requests.content输出的内容是需要解码的(因为网页上的内容是编码而成的,而在Python中字符串形式是以Unicode形式存在的,当然我们只想看到那些字符串,不想看到那些乱七八糟的字节,所以我们爬下来的东西才需要去解码)

1.使用content输出

print(response.content.decode('utf-8')# 以utf-8的编码的方式解码为Unicode

2.使用text输出

response.encoding = 'utf-8'  # 为请求的网页指定该网页的编码方式
print(response.text)

代码实战

请求网页内容

依旧是 requests 库直接请求,可以看上一篇(是一样的)传送门
在请求网页时,我们需要将我们的爬虫伪装成浏览器,具体通过添加请求头 headers 实现。
请求头以字典的形式创建,可以包括很多内容,主要关注:User-Agent, Cookie

这个网页的解码一般是“utf-8“或者“gbk“,可以查看网页的源码,来看下编码方式。
在这里插入图片描述

import time
import requests
from lxml import etree    #这是导入xpath模块

headers= {
    'User-Agent': '...',
    'Cookie': '...',
}
url="https://pic.netbian.com/"
resp=requests.get(url=url,headers=headers)
main_text = resp.content.decode('gbk')
print(main_text)

有输出,证明请求成功。

批量图片保存

接着,我们用xpath解析图片数据,首先找到图片路径和名称。

从网页源代码可以看出,图片的地址都在一个<li>标签里面
在这里插入图片描述
我们通过一个循环来拿到全部的标签的内容,由于它的完整地址是
https://pic.netbian.com/uploads/allimg/230819/143449-169242688936cb.jpg,
而我们获取的地址是
/uploads/allimg/230819/143449-169242688936cb.jpg,
由此我们可以看出图片的整个url缺的是https://pic.netbian.com,然后通过代码把它们拼接在一起。
接着上面的继续写,具体代码如下:

resp.encoding="gbk"
tree=etree.HTML(resp.text)

tu_list = tree.xpath('//*[@id="main"]/div[3]/ul/li')
for tu in tu_list:
    tu_html = url + tu.xpath("./a/img/@src")[0]   #循环获取图片的url
    name = tu.xpath("./a/img/@alt")[0]  # 获取图片名称
    print(tu_html)
    print(name)

输出结果为:

https://pic.netbian.com/uploads/allimg/230819/143449-169242688936cb.jpg
彼岸图网原创 蓝色裙子美女 唯美 鲜花 4k壁纸
https://pic.netbian.com/uploads/allimg/230817/133011-16922502118cba.jpg
敦煌美女 唯美 彼岸图网原创 4K壁纸
...

图片url和名称我们都有了,接下来就是保存了,

tu_get = requests.get(url=html, headers=headers).content # 响应为二进制(bytes)形式
name_path = "img/" + name + '.jpg'
with open(name_path,"wb") as f:
     f.write(tu_get)
     print(name , "下载完成")

注意,我们需要往后点几页看下它的URL,就会发现它们之间是有点不同的
第一页,https://pic.netbian.com/4kdongman/index.html
第二页,https://pic.netbian.com/4kdongman/index_2.html
第三页,https://pic.netbian.com/4kdongman/index_3.html
。。。
因此,可以在代码中加一条判断

根据网页url的规律,来得到要爬取的网址,接着我们把之前的代码封装成一个函数 get_pic,循环爬取前5页的图片,并保存至本地。

for i in range(1,6):
    if i == 1:
        url = "https://pic.netbian.com/4kdongman/index.html"
    else:
        url = "https://pic.netbian.com/4kdongman/index_{}.html".format(i)
    print('这是第'+str(i)+"页数据")

OK,测试成功,可以看到img文件夹下面满满的图片
在这里插入图片描述
完整代码图片爬取,需要自取,笔者写的很粗糙,还可以更精细

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/902709.html

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

相关文章

漏洞指北-VulFocus靶场专栏-入门

漏洞指北-VulFocus靶场01-入门 VulFocus靶场前置条件&#xff1a;入门001 命令执行漏洞step1&#xff1a; 输入默认index的提示step2&#xff1a; 入门002 目录浏览漏洞step1&#xff1a;进入默认页面&#xff0c;找到tmp目录step2 进入tmp目录获取flag文件 VulFocus靶场前置条…

Linux 线程库中的接口介绍

1.pthread_create()创建线程 pthread_create()的语法形式&#xff1a; 参数解释&#xff1a; 第一个参数thread&#xff1a;事先创建好的pthread_t类型的参数。成功时thread指向的内存单元被设置为新创建线程的线程ID。 第二个参数attr&#xff1a;用于定制各种不同的线程属性…

三角形添加数--夏令营

题目 tips&#xff1a; 1.本题不要求正三角形输出&#xff0c;只要输出左下三角即可 2.这种输入三角形的&#xff0c;都是可以理解为左下三角形的模型&#xff0c;然后去写f[i][j]f[i-1][j]f[i-1][j1]&#xff0c;写行列 3.还有双重for循环输入输出三角形&#xff0c;注意第二…

数据处理与统计分析——MySQL与SQL

这里写目录标题 1、初识数据库1.1、什么是数据库1.2、数据库分类1.3、相关概念1.4、MySQL及其安装1.5、基本命令 2、基本命令2.1、操作数据库2.2、数据库的列类型2.3、数据库的字段属性2.4 创建和删除数据库表2.5、数据库存储引擎2.6、修改数据库 3、MySQL数据管理3.1、外键 My…

YOLOv5+deepsort实现目标追踪。(附有各种错误解决办法)

一、YOLOv5算法相关配置 🐸这里如果是自己只想跑一跑YOLOV5的话,可以参考本章节。只想跑通YOLOv5+deepsort的看官移步到下一章节。 1.1 yolov5下载 🐸yolov5源码在github下载地址上或者Gitee上面都有。需要注意的是由于yolov5的代码库作者一直在维护,所以下载的时候需…

【前端】vscode javascript 代码片段失效问题解决

1. 文件--首选项--用户代码片段-vue.json : 添加 // { // // Place your global snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and // // description. Add comma separated ids of the languages where the snippet is app…

CentOS 7重置root密码

CentOS 7 如何找回被您 遗忘得 root密码呢? 步骤如下: 步骤一:在开机出现如下界面的时候就按“e”键 步骤二:在步骤一按下”e”键之后,出现如下界面,按 ↓键一直到底部找到“LANG=zh_CN.UTF-8”这句,在这句后面加上“init=/bin/sh”,然后按Ctrl+x进入单用户,此时需要…

Log4Qt日志框架(1)- 引入到QT中

Log4Qt日志框架&#xff08;1&#xff09;- 引入到QT中 1 下载源码2 简介3 加入到自己的项目中3.1 使用库文件3.2 引入源文件 4 说明 1 下载源码 github&#xff1a;https://github.com/MEONMedical/Log4Qt 官方(版本较老)&#xff1a;https://sourceforge.net/projects/log4q…

【李群李代数】李群控制器(lie-group-controllers)介绍——控制 SO(3) 空间中的系统的比例控制器Demo...

李群控制器SO(3)测试 测试代码是一个用于控制 SO(3) 空间中的系统的比例控制器。它通过计算控制策略来使当前状态逼近期望状态。该控制器使用比例增益 kp 进行参数化&#xff0c;然后进行一系列迭代以更新系统状态&#xff0c;最终检查状态误差是否小于给定的阈值。这个控制器用…

用 Python 算法预测银行客户行为实战案例

这是一份kaggle上的银行的数据集&#xff0c;研究该数据集可以预测客户是否认购定期存款y。这里包含20个特征。 1. 分析框架 2. 数据读取&#xff0c;数据清洗 # 导入相关包 import numpy as np import pandas as pd # 读取数据 data pd.read_csv(./1bank-additional-full.…

谈谈通信工程专业

目录 1.什么是通信工程 2.通信工程学什么 3.通信工程就业方向 4.通信工程发展前景 1.什么是通信工程 通信工程是一门工程学科&#xff0c;它涉及到设计、建设和管理通信系统以及相关设备和技术的应用。通信工程主要关注的是信息的传输、交换和处理&#xff0c;旨在实现可靠…

vue初始化没反应可以换个位置

本来 这个 在最后初始化没反应 &#xff0c;换到 中间就可以了 created() {this.model Object.assign({}, {});this.loadTreeData();this.initColumnsSetting()},

Postman返回了一个html页面

问题记录 调用公司的测试环境接口&#xff0c;从浏览器控制台接口处cCopy as cURL(cmd)&#xff0c;获取完整的请求内容&#xff0c;然后导入postman发起请求 提测时发现返回一个html页面&#xff0c;明显是被请求在网管处被拦截了&#xff0c;网关返回的这个报错html页面 …

第18集丨Vue脚手架的默认配置

目录 一、查看默认配置1.1 在此系统中禁止执行脚本1.2 错误解决方案1.3 执行成功生成的配置项 二、关闭语法检查 一、查看默认配置 Vue脚手架隐藏了所有 webpack 相关的配置&#xff0c;若想查看具体的 webpak 配置&#xff0c;请执行&#xff1a;vue inspect > output.js …

基于javaweb的社区疫情防控系统

摘 要 随着当今网络的发展&#xff0c;时代的进步&#xff0c;各行各业也在发生着变化&#xff0c;于是网络已经逐步进入人们的生活&#xff0c;给我们生活或者工作提供了新的方向新的可能。 本毕业设计的内容是设计实现一个springboot框架的社区疫情防控系统。它是以java语…

使用 HTML、CSS 和 JavaScript 创建实时 Web 编辑器

使用 HTML、CSS 和 JavaScript 创建实时 Web 编辑器 在本文中&#xff0c;我们将创建一个实时网页编辑器。这是一个 Web 应用程序&#xff0c;允许我们在网页上编写 HTML、CSS 和 JavaScript 代码并实时查看结果。这是学习 Web 开发和测试代码片段的绝佳工具。我们将使用ifram…

第十五章:联邦学习攻防实战

代码 联邦学习的后门攻击案例 联邦学习的模型压缩案例 联邦学习的差分隐私案例 联邦学习的同态加密案例 联邦学习的参数稀疏化案例

../../ 目录遍历

在web功能设计中,很多时候我们会要将需要访问的文件定义成变量&#xff0c;从而让前端的功能便的更加灵活。 当用户发起一个前端的请求时&#xff0c;便会将请求的这个文件的值(比如文件名称)传递到后台&#xff0c;后台再执行其对应的文件。 在这个过程中&#xff0c;如果后…

无涯教程-PHP - Cookies

Cookies是存储在客户端计算机上的文本文件。 识别用户涉及三个步骤- 服务器脚本将一组cookie发送到浏览器。如姓名&#xff0c;年龄或身份证等。浏览器将此信息存储在本地计算机上&#xff0c;以备将来使用。下次浏览器向Web服务器发送任何请求时&#xff0c;它将向服务器发送…

网盘传文件限速严重,来试试ssh内网穿透创建的公网到本地http服务器吧

title: 网盘传文件限速严重&#xff0c;来试试ssh内网穿透创建的公网到本地http服务器吧 如果你被国内某度网盘的火星传输速度折磨&#xff0c;可以搞一个固定IP的服务器&#xff0c;传输文件会变得简单&#xff0c;通过ssh转发&#xff0c;我们可以让接受者通过浏览器直接下载…