python-(6-4-4)爬虫---bs解析案例---爬取图片
创始人
2024-03-25 16:57:53
0

文章目录

  • 一 需求
  • 二 操作思路
    • 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下面的imgimg = 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()

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...