11. 实战:bs4法抓取网页图片并保存到本地文件夹

2023-11-05

前言

我们通过前面几节的学习已经了解到bs4模块对于我们抓取网页的方便之处,也通过一个实例实践了抓取某网站菜价。本节我们以某图片网为例(链接放评论区),实现抓取唯美壁纸栏目的内容并保存到本地文件夹。

目标
目标


思路

1. 获取所有子页面链接地址

2. 获取子页面中图片资源地址

3. 下载图片


代码实现

第一步,老规矩,先获取页面源代码

import requests
from bs4 import BeautifulSoup
import time

url = "在评论区"
resp = requests.get(url)
resp.encoding = 'utf-8'  # 处理乱码

第二步,把源代码扔给BeautifulSoup处理,找到子链接

# 把源代码交给bs
main_page = BeautifulSoup(resp.text, "html.parser")
item_list = main_page.find_all("div", class_="item masonry_brick")
alist = []
for item in item_list:
    find = item.find("a")
    alist.append(find)
# print(alist)

第三步,遍历访问子链接,获取子页面源代码并拿到图片下载路径

for a in alist:
    href = 'https://www.umei.cc/' + a.get('href').strip("/")  # 直接通过get就可以拿到属性的值
    # 拿到子页面的源代码
    child_page_resp = requests.get(href)
    child_page_resp.encoding = 'utf-8'
    child_page_text = child_page_resp.text
    # 从子页面中拿到图片的下载路径
    child_page = BeautifulSoup(child_page_text, "html.parser")
    div = child_page.find("div", class_="big-pic")
    img = div.find("img")
    src = img.get("src")

第四步,下载图片

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

    print("over!!!", img_name)
    time.sleep(1)

print("all over!!!")

下载图片的思路很简单,只需要拿到图片的字节形式,并用二进制方式写入本地文件夹(wb为二进制写,很明显是write byte的缩写嘛)


完整代码

# 1.拿到主页面的源代码. 然后提取到子页面的链接地址, href
# 2.通过href拿到子页面的内容. 从子页面中找到图片的下载地址 img -> src
# 3.下载图片

import requests
from bs4 import BeautifulSoup
import time

url = "见评论区"
resp = requests.get(url)
resp.encoding = 'utf-8'  # 处理乱码

# print(resp.text)
# 把源代码交给bs
main_page = BeautifulSoup(resp.text, "html.parser")
item_list = main_page.find_all("div", class_="item masonry_brick")
alist = []
for item in item_list:
    find = item.find("a")
    alist.append(find)
# print(alist)
for a in alist:
    href = 'https://www.umei.cc/' + a.get('href').strip("/")  # 直接通过get就可以拿到属性的值
    # 拿到子页面的源代码
    child_page_resp = requests.get(href)
    child_page_resp.encoding = 'utf-8'
    child_page_text = child_page_resp.text
    # 从子页面中拿到图片的下载路径
    child_page = BeautifulSoup(child_page_text, "html.parser")
    div = child_page.find("div", class_="big-pic")
    img = div.find("img")
    src = img.get("src")
    # 下载图片
    img_resp = requests.get(src)
    # img_resp.content  # 这里拿到的是字节
    img_name = src.split("/")[-1]  # 拿到url中的最后一个/以后的内容
    with open("img8/" + img_name, mode="wb") as f:
        f.write(img_resp.content)  # 图片写入文件

    print("over!!!", img_name)
    time.sleep(1)

print("all over!!!")

运行效果

我爬取了一部分就停了,咱还是悠着点,练练手就好了。

Tips:由于PyCharm每次在项目文件夹有更新时,都会遍历一次文件夹,更新文件索引。我们爬取图片太多的时候,很有可能会在这一步让我们的编译软件越来越卡,所以可以右击创建的img文件夹,选择Mark Directory as...,再选择Excluded,这样就是告诉PyCharm,我们这个文件夹不属于项目调用的范畴,它也就不会每次都花力气对它索引了。


总结

今天我们操作了bs4的一个实战例子,运用bs4模块对某网站的唯美壁纸进行批量下载到本地文件夹的操作,提升了爬虫技术。下一节我们将开始xpath的教学。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

11. 实战:bs4法抓取网页图片并保存到本地文件夹 的相关文章

随机推荐

  • 子网计算方法

    问题 把192 168 253 0 28划分多个子网 请列出所有的可用子网段和对应主机范围 解 1 计算子网 掩码为28个1 即11111111 11111111 11111111 11110000 点分十进制表示为255 255 255
  • 补码除法运算(加减交替法)

    x 补 00 1000 除数y 补 11 0101 两个数是异号 因此使用x 补 y 补 11 1101 11 1101继续与y 补 对比 发现是同号 商上1 余数11 1101向左移动一位 再加上 y 补 结果为00 0101 余数00
  • 在家靠python爬虫兼职月入3w+:成年人的世界,钱是底气!

    在2023年新一轮疫情期间 有啥方法 可在家快速赚钱 冲上了热门话题 好想挣钱啊 单位难开工 生意不开张 咱们才惊醒 领死工资的生活 真的好脆弱 平时总说副业赚钱 但也就说说而已 副业在哪 钱在哪 都没影 现实是 副业 低端兼职 赔本买卖
  • JS 跳过 debugger 的几种方法

    js中通常用debugger关键字来实现无限循环 js中通常用debugger关键字来实现无限循环 debugger 语句用于停止执行 JavaScript 以下简称JS 并调用 如果可用 调试函数 使用 debugger 语句类似于在代码
  • map结构用法

    map结构是所谓的映射关系 其元素组成部分为键值对的形式存在 key value 其中键 key 不可重复 头文件引用 include
  • 服务器系统与环境变量,什么叫Web服务器的环境变量

    服务器环境变量的详细说明 本机ip request servervariables remote addr br 服务器名 Request ServerVariables SERVER NAME br 服务器IP Request Serve
  • 疫情期间,程序员开展副业的时候怎么和客户沟通呢?记住下面这几条,是你有一桶金的第一步!

    不同的身份 一直对自由职业报有期待 虽然现在还是一颗螺丝钉 我想 为了更好的创造自己的价值 我可否用自己的技能做一些东西呢 于是 工作之外 我开始寻找接单做项目 现在 这种程序员接单的平台有很多 国内国外都有 可是万事开头难 有这种渠道不一
  • Java 虚拟机内部类静态字段的初始化与访问

    要明白 Java 虚拟机如何访问类的静态变量 首先要明白下面几个问题 虚拟机内部是如何表示一个 Java 类的 静态变量存储在哪里 虚拟机如何访问到这些静态变量 这篇文章也从这围绕这三个问题展开 并结合 OpenJDK 中 HotSpot
  • [LeetCode]62. 不同路径

    62 不同路径 难度 中等 一个机器人位于一个 m x n 网格的左上角 起始点在下图中标记为 Start 机器人每次只能向下或者向右移动一步 机器人试图达到网格的右下角 在下图中标记为 Finish 问总共有多少条不同的路径 示例 1 输
  • vuepress2.0使用教程(10)-从零开始搭建自定义模板

    百家饭团队开发的百家饭OpenAPI平台是用vuepress2 0搭建的 搭建的时候不知道2 0还处在beta状态 所以导致后来踩了一些坑 使用过程中vuepress2 0也从2 0 0 beta 18升到了2 0 0 beta 48 有很
  • JS逆向新技术--JSRPC

    声明 本文章中所有内容仅供学习交流 不可用于任何商业用途和非法用途 否则后果自负 如有侵权 请联系作者立即删除 由于本人水平有限 如有理解或者描述不准确的地方 还望各位大佬指教 介绍 JSRPC意思就是远程调用js代码 全称 Remote
  • tinyhttpd代码注释

    J David s webserver This is a simple webserver Created November 1999 by J David Blackstone CSE 4344 Network concepts Pro
  • Tomcat的简单使用

    简单使用Tomcat 1 Tomcat Web容器 1 1安装 1 2 Tomcat文件夹功能讲解 3 启动Tomcat 4 发布网页 1 Tomcat Web容器 Tomcat是用来发布前端站点或者后端程序的 1 1安装 Tomcat 的
  • 正点原子Imx6ULL+LCD屏,竖屏使用时如何修改开机进度条

    正点原子给出的修改开机进度条 在使用时LCD是基于横版情况设定的 那对于像手机一样竖屏时 会发现不合适 因此对此进行了研究 首先准备图片 将logo alientek png logo psplash bar png文件旋转90度 旋转后如
  • Parallels Desktop 18提示“由于临界误差,不能启动虚拟机”

    Parallels Desktop最近更新到了18 2 0版本 但是许多小伙伴更新之后遇到了 由于临界误差 不能启动虚拟机 这样的问题 接下来小编就为大家带来解决PD虚拟机提示临界误差的解决方法 出现这个问题很有可能是Prl disp se
  • Xml中SelectSingleNode用法详解(转)

    最常见的XML数据类型有 Element Attribute Comment Text Element 指形如
  • redis sentinel搭建以及在jedis中使用

    一 redis主从搭建 1 搭建redis master 1 gt redis安装 mkdir p usr local webserver redis 安装目录 cd usr local webserver redis wget http
  • Java使用POI操作Excel合并单元格

    合并单元格的方法 指定 4 个参数 起始行 结束行 起始列 结束列 然后这个区域将被合并 CellRangeAddress region new CellRangeAddress startRow endRow startCol endCo
  • 某站webpack打包JS逆向,keyCipher、keySM2Cipher参数分析

    文章目录 前言 一 抓包分析 二 参数解析 1 加密定位 2 参数分析 三 响应解密 1 加密定位 总结 前言 今天来水一篇文章 某站webpack打包类型 登录 数据解密参数keyCipher keySM2Cipher 本文章仅供学习研究
  • 11. 实战:bs4法抓取网页图片并保存到本地文件夹

    前言 我们通过前面几节的学习已经了解到bs4模块对于我们抓取网页的方便之处 也通过一个实例实践了抓取某网站菜价 本节我们以某图片网为例 链接放评论区 实现抓取唯美壁纸栏目的内容并保存到本地文件夹 目标 思路 1 获取所有子页面链接地址 2