『python爬虫』09. bs4实战之下载精美壁纸(保姆级图文)

news2024/10/2 3:13:50

目录

    • 爬取思路
    • 代码思路
      • 1.拿到主页面的源代码. 然后提取到子页面的链接地址, href
      • 2.通过href拿到子页面的内容. 从子页面中找到图片的下载地址 img -> src
      • 3.下载图片
    • 3. 完整实现代码
    • 总结


欢迎关注 『python爬虫』 专栏,持续更新中
欢迎关注 『python爬虫』 专栏,持续更新中

爬取思路

一个壁纸网站
https://www.umei.cc/bizhitupian/weimeibizhi/

大体思路

我们要找到这个a标签中的图片的高清大图的下载url

在这里插入图片描述
分析发现每个页面a标签上一级都在class=img的div标签包裹下,那我们就抓取所有的这类div标签,然后在for遍历时在每个div中找到a标签,通过get方法得到其中的href地址。
在这里插入图片描述
我们比对两张大图的url发现都在div class="big-pic"包裹下
在这里插入图片描述
在这里插入图片描述
注意我们得到的href还需要加上访问前缀"https://www.umei.cc/"+href这才组成了完整的下载地址。


代码思路

1.拿到主页面的源代码. 然后提取到子页面的链接地址, href

import requests
from bs4 import BeautifulSoup
import time

url = "https://www.umei.cc/bizhitupian/weimeibizhi/"
resp = requests.get(url)
resp.encoding = 'utf-8'  # 处理乱码

# print(resp.text)
# 把源代码交给bs
main_page = BeautifulSoup(resp.text, "html.parser")
alist = main_page.find_all("div", class_="img")
print(alist)

2.通过href拿到子页面的内容. 从子页面中找到图片的下载地址 img -> src

    href = a.find("a").get('href')  # 直接通过get就可以拿到属性的值
    # 拿到子页面的源代码
    child_page_resp = requests.get("https://www.umei.cc/"+href)#组合得到子页面图片地址
    child_page_resp.encoding = 'utf-8'
    child_page_text = child_page_resp.text

    # 从子页面中拿到图片的下载路径
    child_page = BeautifulSoup(child_page_text, "html.parser")
    child_page_div = child_page.find("div", class_="big-pic")
    img = child_page_div.find("img")
    src = img.get("src")

3.下载图片

    # 下载图片
    img_resp = requests.get(src)
    # img_resp.content  # 这里拿到的是字节
    img_name = src.split("/")[-1]  # 拿到url中的最后一个/以后的内容
    with open("img/"+img_name, mode="wb") as f:
        f.write(img_resp.content)  # 图片内容写入文件

    print("over!!!", img_name)
    time.sleep(1)#休息延迟

3. 完整实现代码

import requests
from bs4 import BeautifulSoup
import time

url = "https://www.umei.cc/bizhitupian/weimeibizhi/"
resp = requests.get(url)
resp.encoding = 'utf-8'  # 处理乱码

# print(resp.text)
# 把源代码交给bs
main_page = BeautifulSoup(resp.text, "html.parser")
alist = main_page.find_all("div", class_="img")
print(alist)
for a in alist[0:10]:#爬取前面10张如果去掉 [0:10] 就表示爬取当前页面的所有,比较慢,不建议使用。也可能会影响网站的负载
    href = a.find("a").get('href')  # 直接通过get就可以拿到属性的值
    # 拿到子页面的源代码
    child_page_resp = requests.get("https://www.umei.cc/"+href)#组合得到子页面图片地址
    child_page_resp.encoding = 'utf-8'
    child_page_text = child_page_resp.text
    # 从子页面中拿到图片的下载路径
    child_page = BeautifulSoup(child_page_text, "html.parser")
    child_page_div = child_page.find("div", class_="big-pic")
    img = child_page_div.find("img")
    src = img.get("src")
    # 下载图片
    img_resp = requests.get(src)
    # img_resp.content  # 这里拿到的是字节
    img_name = src.split("/")[-1]  # 拿到url中的最后一个/以后的内容
    with open("img/"+img_name, mode="wb") as f:
        f.write(img_resp.content)  # 图片内容写入文件

    print("over!!!", img_name)
    time.sleep(1)#休息延迟


print("all over!!!")

爬取结果
在这里插入图片描述
高清大图
在这里插入图片描述


总结

大家喜欢的话,给个👍,点个关注!给大家分享更多计算机专业学生的求学之路!

版权声明:

发现你走远了@mzh原创作品,转载必须标注原文链接

Copyright 2023 mzh

Crated:2023-3-1

欢迎关注 『python爬虫』 专栏,持续更新中
欢迎关注 『python爬虫』 专栏,持续更新中
『未完待续』


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

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

相关文章

docker 非持久化存储 tmpfs mounts

docker 非持久化存储 tmpfs mounts 简介tmpfs mounts 限制--tmpfs 和 --mount 之间的差异在容器中使用 tmpfs mounts指定 tmpfs 选项 简介 官方文档:https://docs.docker.com/storage/tmpfs/ 与 volume 和 bind mounts 不同,tmpfs mounts 是临时的&…

jdk中juc多线程编程工具

jdk线程池实现原理分析 目录 CompletionService CompletableFuture 基本原理 CompletableFuture的接口 静态方法 handle() vs whenComplete() xxxEither() 异常处理exceptionally() 获取任务结果 结束任务 Semaphore CyclicBarrier CountDownLatch jdk线程池实…

《斯坦福数据挖掘教程·第三版》读书笔记(英文版)Chapter 4 Mining Data Streams

来源:《斯坦福数据挖掘教程第三版》对应的公开英文书和PPT Chapter 4 Mining Data Streams 💡 Skip this chapter due to its difficulty and for me, it is hard to understand. Summary of Chapter 4 The Stream Data Model: This model assumes da…

【微机原理】半导体存储器

目录 一.半导体存储器的分类 二、半导体存储器性能指标 三、半导体存储器的结构 一.半导体存储器的分类 半导体存储器的分类方法有很多种。 1.按器件原理来分:有双极型存储器和MOS型存储器。 双极型:速度快、集成度低、功耗大MOS型:速度慢、集…

“ 探索迷局:解密广度寻路算法 “

专栏文章,自下而上 数据结构与算法——二叉搜索树 数据结构与算法——深度寻路算法 数据结构与算法——二叉树实现表达式树 数据结构与算法——树(三指针描述一棵树) 数据结构与算法——栈和队列<也不过如此> 数据结构与算法——八…

C++的智能指针

文章目录 1. 内存泄漏1.1 什么是内存泄漏1.2 内存泄漏分类 2. 为什么需要智能指针3. 智能指针的使用及原理3.1 RAII3.2 使用RAII思想设计的SmartPtr类3.3 让SmartPtr像指针一样3.3 SmartPtr的拷贝3.4 auto_ptr3.5 unique_ptr3.6 shared_ptr3.6.1 shared_ptr的循环引用3.6.2 wea…

MYSQL-数据库管理(上)

一、数据库概述 一、数据库基本概念 1.1 数据 1) 描述事物的符号记录称为数据(Data)。数字、文字、图形、图像、声音、档案记录等 都是数据。 2)数据是以“记录”的形式按照统一的格式进行存储的,而不是杂乱无章的。…

机器学习之分类决策树与回归决策树—基于python实现

大家好,我是带我去滑雪! 本期为大家介绍决策树算法,它一种基学习器,广泛应用于集成学习,用于大幅度提高模型的预测准确率。决策树在分区域时,会考虑特征向量对响应变量的影响,且每次仅使用一个分…

vs编译生成动态库

说明 windows版本,vs2019 创建一个动态库 新建一c项目,创建一个dll类型项目。 在头文件中添加一个mylib.h文件: #pragma once#ifndef MYLIB_H #define MYLIB_Hextern "C" __declspec(dllexport) void Hello(); extern "C…

UG NX二次开发(C++)-建模-修改NXObject或者Feature的颜色(一)

文章目录 1、前言2、在UG NX中修改Feature的颜色操作3、采用NXOpen(C)实现3.1 创建修改特征的方法3.2 调用ModifyFeatureColor方法3.3 测试结果 1、前言 在UG NX中,改变NXObject和Feature的操作是不相同的,所以其二次开发的代码也不一样,我们…

优化问题的拉格朗日Lagrange对偶法原理

首先我们定义一般形式的求解x的优化问题: 表示优化的目标函数,上述为最小优化,实际上最大优化可以改写为的形式表示第i个不等式约束表示等式约束 1. Lagrange对偶问题 上述优化问题的拉格朗日Lagrange对偶法求解,是将上述带约束…

Baumer工业相机堡盟工业相机如何联合BGAPISDK和Halcon实现图像的直方图算法增强(C#)

Baumer工业相机堡盟工业相机如何联合BGAPISDK和Halcon实现图像的直方图算法增强(C#) Baumer工业相机Baumer工业相机使用图像算法增加图像的技术背景Baumer工业相机通过BGAPI SDK联合Halcon使用直方图图像增强算法1.引用合适的类文件2.BGAPI SDK在图像回调…

车牌识别系统完整商用级别设计流程

简介 车牌识别(License Plate Recognition)是一种通过计算机视觉技术识别和提取车辆车牌上字符信息的技术。它在交通管理、智慧停车、安防监控等领域有着广泛的应用。 本项目将带完整的了解车牌识别系统设计思路,以及实现流程。 算法部分应…

图书管理系统【控制台+MySQL】(Java课设)

系统类型 控制台类型Mysql数据库存储数据 使用范围 适合作为Java课设!!! 部署环境 jdk1.8Mysql8.0Idea或eclipsejdbc 运行效果 本系统源码地址:https://download.csdn.net/download/qq_50954361/87737294 更多系统资源库地…

机器学习 --- 绪论

第1关:什么是机器学习 任务描述 ​ 本关任务:根据本节课所学知识完成本关所设置的选择题。 相关知识 ​ 为了完成本关任务,你需要掌握: 什么是机器学习。 什么是机器学习 ​ 相信大家一定都非常喜欢吃西…

【Python】【进阶篇】21、Django Admin数据表可视化

目录 21、Django Admin数据表可视化1. 创建超级用户2. 将Model注册到管理后台1)在admin.py文件中声明 3. django_admin_log数据表 21、Django Admin数据表可视化 在《Django Admin后台管理系统》介绍过 Django 的后台管理系统是为了方便站点管理人员对数据表进行操作。Django …

【Java面试八股文】数据库篇

导航: 【黑马Java笔记踩坑汇总】JavaSEJavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线MySQL高级篇设计模式牛客面试题 目录 请你说说MySQL索引,以及它们的好处和坏处 请你说说MySQL的索引是什么结构,为什么不用哈希表 请你说说数据库索引的底…

R语言 | 编写自己的函数

目录 一、正式编写程序 二、设计第一个函数 三、函数也是一个对象 四、程序代码的简化 五、return()函数的功能 六、省略函数的大括号 七、传递多个参数函数的应用 7.1 设计可传递2个参数的函数 7.2 函数参数的默认值 7.3 3点参数“…”的使用 八、函数也可以作为参数 …

《针灸》笔记(倪海厦先生人纪系列针灸篇)

程序员上了年纪,各种职业病就来了,人工智能成为好工具的同时,自己的时间也多了一些。 了解他才能判断他的真伪,没学过就认为中医是糟粕的,请划走。 学到什么记什么,线上线下齐下手,自用笔记&…

【Python基础入门学习】Python高级变量你了解多少?

认识高级变量 1. 列表 list1.1 列表的定义1.2 列表常用操作关键字、函数和方法 1.3 循环遍历1.4 列表嵌套1.5 应用场景 2. 元组 tuple2.1 元组的定义2.2 元组常用操作2.3 应用场景 3. 字典 dictionary3.1 字典的含义3.2 字典常用操作3.3 应用场景 4. 字符串 string4.1 字符串的…