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()

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...