python-(6-4-4)爬虫---bs解析案例---爬取图片

news2024/11/16 13:47:16

文章目录

  • 一 需求
  • 二 操作思路
    • 1 拿到主页面的源代码,提取链接地址href
    • 2 通过href拿到子页面的内容,并找到图片下载地址 img ---> src
    • 3 下载图片
  • 三 分析步骤
    • 1 拿到主页面的源代码,提取链接地址href
    • 2 通过href拿到子页面的内容,并找到图片下载地址 img ---> src
    • 3 下载图片
  • 四 完整代码

一 需求

拿到某网站的动漫图片

在这里插入图片描述

二 操作思路

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

2 通过href拿到子页面的内容,并找到图片下载地址 img —> src

3 下载图片

三 分析步骤

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

基于get请求,获取网页源代码的步骤分析,此处不作具体说明,可参考笔者的文章。
python-(6-3-1)爬虫—requests入门(基于get请求)

接着打开网页源代码,提取子页面的链接地址。

按住ctrl+F,搜索taotu-main,我们可以定位找到这些子页面的链接地址信息。

在这里插入图片描述

然后得到所有"a"标签的信息,将其遍历循环,从而得到每一个"a"标签后面对应的href,也就是子链接。

2 通过href拿到子页面的内容,并找到图片下载地址 img —> src

拿到子页面的源代码,然后从中拿到图片的下载地址

在这里插入图片描述

接着在网页源代码中搜索复制的文字,定位到这张图片的位置。

在这里插入图片描述
然后通过代码,就可以实现对下载地址的获取。

3 下载图片

如果想要将图片存储在某一文件夹下,需要提前创建好文件目录。

在下载较多的图片时,为了防止高频的网站请求被服务器挂掉,我们可以导入time模块,通过sleep程序,让程序等待几秒钟,然后再进行新的页面访问请求。

另外,在执行代码时,pycharm会对当前加载的文件夹中的所有内容做一个索引,以便快速查找数据。而我们下载的图片尽管是新增的文件,但pycharm也会对其建立索引。当下载的图片很多时,会占用系统资源,让pycharm很卡,所以图片文件的索引便没有构建的必要。

在这里插入图片描述

如上图操作,便可以取消对其文件夹建立索引。

四 完整代码

import requests
import sys
import io
from bs4 import BeautifulSoup
import time

# 改变标准输出的默认编码
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030')

domain = 'https://www.umei.cc/katongdongman/'
headers = {
     "user-agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Mobile Safari/537.36"
}
resp = requests.get(url=domain,headers=headers)

# 与网页源代码上的字符集对应
resp.encoding = "utf-8"
#print(resp.text)


# 把源代码交给bs
main_page = BeautifulSoup(resp.text,"html.parser")
# 把范围缩小,找到"taotu_main"下面的所有的"a"标签
a_list = main_page.find("div", class_= "taotu-main").find_all("a")

# 网站url
url_pre = "https://www.umei.cc"


# 遍历每一个a标签
for a in a_list:
    # 通过get拿到每个a标签中href属性的值
    href = a.get("href")
    url = url_pre + href

    # 拿到子页面的源代码
    child_page_resp = requests.get(url)
    child_page_resp.encoding = 'utf-8'
    child_page_text = child_page_resp.text

    # 从子页面中拿到图片的下载链接
    child_page = BeautifulSoup(child_page_text, "html.parser")
    # 找到div标签
    div = child_page.find("div", class_="big-pic")
    # 找到div下面的img
    img = div.find("img")
    # 找到img下面的src图片下载地址
    src = img.get("src")
    print(src)
    #break  # 仅作测试使用

    # 下载图片
    img_resp = requests.get(src)
    # 拿到图片url最后一个/后面的内容
    img_name = src.split("/")[-1]

    # 放在当前目录下,img\目录下。该目录需要提前创建好
    with open("img/"+img_name,mode="wb") as f:
        # 获取图片数据的字节信息,就是图片的文件
        # 图片内容写入文件并保存
        f.write(img_resp.content)

    print("over!!!", img_name)

    # 每次遍历后程序休息1秒钟,防止因高频的访问请求被服务器干掉
    time.sleep(1)
    #break  #测试需要

print("all is over!!!!!!!")

# 关闭访问请求的连接
resp.close()

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

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

相关文章

sketch基础教程大全,对象、图层、画板常见技巧

sketch对象、图层、画板的使用技巧 1.通过快捷键调整图形的形状 选择图形,按住Command按键,然后通过上、下、左、右方向键按1像素调整图形形状。同时按住按钮。CommandShift方向键,可调整方向键。 ​2.复制元素 选择一个元素,按…

计算机毕业设计——基于Android的真人社交游戏辅助应用开发

编号 本科生毕业设计(论文) 题目: 真人社交游戏辅助应用开发 专业 学 号 学生姓名 指导教师 摘 要 时至今日,社交已成为人们生活中必不可少的一部分,社交网络的盛行已经成为一种必然趋势.与此同时&a…

语音识别之Kaldi学习GMM-HMM

语音识别之Kaldi kaldi语音识别理论与实践课程学习。 前面的博客介绍了语音识别的基础知识及原理。现在开始学习实战。以Kaldi框架为基础。 Kaldi是一个有全套的语音识别代码的工具,由Dan Povey博士和捷克的BUT大学联合开发,最早发布于2011年&#xf…

文献检索工具 | 计算机类英文文献检索数据库DBLP

文章目录1.什么是DBLP?2.DBLP文献检索的3种方式2.1.检索指定会议/期刊的论文2.2.检索指定作者的论文2.3.检索指定题目的论文3.Tips:DBLP中各个颜色模块含义1.什么是DBLP? 定义: DBLP(DataBase systems and Logic Programming&…

JS 数组去重的多种方法

1. 前言 2. 普通方法数组去重 3. filter indexOf 4. ES6 的 new Set() 5. 需要注意的问题 1. 前言 本文提供两个数组变量供测试使用 const array [html, css, js, css]const resArr [html, css, css, [1], [1]]2. 普通方法数组去重 下面列举几种数组去重的方法思路都一…

JavaScript大作业 制作简单的程序员个人博客网站(web前端网页制作课作业)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

花钱去IT培训班学习几个月软件测试真的值得吗?

为什么网上一问去IT培训机构报班学软件测试,一大堆人就会跳出来说不建议、劝退、建议自学? 为什么IT培训机构那么多坑,还有那么多学生愿意花几万块钱去学软件测试? 有人说:网上那么多的视频资料,很多都是…

五、输入输出管理(二)I/O管理概述

目录 2.1 I/O 软件层次结构 2.1.1用户层 I/O 软件 2.1.2设备独立软件 2.1.3设备驱动程序 2.2应用程序与I/O接口 2.2.1字符设备接口 2.2.2块设备接口 2.2.3网络设备接口 2.2.4阻塞/非阻塞 I/O I/O系统概述、I/O接口、I/O控制的四种方式(程序直接控制方式、程…

Trimble Tekla Structures支持14种不同的语言

Trimble Tekla Structures支持14种不同的语言 Tekla Structures被称为前Xsteel,是Trimble Software的产品,Trimble软件是一种强大的BIM机器。该软件为用户提供的环境,用户可以绘制接下来的三个模型并从中提取接下来的两个模型。该软件制作的模…

linux下pycharm运行错误解决办法

错误1: Inspection info:this inspection detects names that should resolve but dont.due to dynamic dispatch 重新设置虚拟环境即可,前面几篇文章有如何配置虚拟环境的教程 错误2: 有时候即使我们配好环境后在代码中也会出…

【玩转c++】c++内存管理 new/delete

本期主题:c/c内存管理。 博客主页:小峰同学分享小编的在Linux中学习到的知识和遇到的问题小编的能力有限,出现错误希望大家不吝赐身为程序员 ,不会有人没有女朋友吧。 目录 🍁1. 了解c/c内存区域划分 🍁2.…

hbuilderx升级3.6.5版本后运行到手机端同步资源失败,未得到同步资源的授权,请停止运行后重新运行,并注意手机上的授权提示

问题1: hbuilderx升级3.6.5版本后运行到手机端同步资源失败,未得到同步资源的授权,请停止运行后重新运行,并注意手机上的授权提示。 解决问题指路。 https://uniapp.dcloud.net.cn/tutorial/run/run-app-faq.html#node https://un…

在线考试系统毕业设计,线上考试系统设计与实现,毕业设计论文源码开题报告需求分析

项目背景和意义 目的:本课题主要目标是设计并能够实现一个在线考试的java系统,整体使用了基于浏览器的B/S架构,技术上使用了基于java的springboot框架;使用浏览器,通过后台添加考试题目,学生通过浏览器登录…

一文解决网络系统调用接口到内核的请求

网络套接字入口函数 //所有的网络套接字系统调用函数(socket bind listen connect )都使用一个共同的入口函数:sys_socketcall /* 第一个参数call表示被调用的应用层接口函数,第二个参数是一个指针,指向具体被调用函数…

【综合案例】原生JS实现购物商城

目录一、案例说明1、目录结构2、conf文件夹3、用户名密码的正则和ajax的封装二、登录页的实现1、案例效果2、登录页逻辑3、接口文档4、代码实现5、返回信息显示三、首页的实现1、案例效果2、首页的逻辑3、接口文档4、代码实现5、返回信息显示四、个人中心1、案例效果2、个人页的…

springboot车辆管理系统的设计与实现毕业设计源码031034

车辆管理系统的设计与实现 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代。在现实运用中&…

Runtime源码解析-alloc

Runtime源码解析-alloc 前言alloc 通过汇编查看调用流程1. objc_alloc方法2. callAlloc方法 首次进入非首次进入LLVM优化 3. _objc_rootAllocWithZone方法4. _class_createInstanceFromZone方法 instanceSize:计算内存大小 fastInstanceSizealignedInstanceSize mal…

TS201的DMA通信基本原理以及IIR的加深理解(含源代码)

实验目的: 了解DMA通信基本原理,掌握内存与SDRAM间一维DMA通信方式、二维DMA通信方式以及相关控制方法。学习数字滤波器设计方法,掌握其调试步骤,使学生加深对IIR的理解,进一步提高对数字信号处理理论的认识。 实验任…

Java+SSM美妆商城全套电商购物(含源码+论文+答辩PPT等)

项目功能简介: 本项目含代码详细讲解视频,手把手带同学们敲代码从0到1完成项目 该项目采用技术Springmvc、Spring、MyBatis、Tomcat服务器、MySQL数据库 项目含有源码、配套开发软件、软件安装教程、项目发布教程以及代码讲解教程 项目功能介绍: 系统管理…

[附源码]计算机毕业设计酒店物联网平台系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…