基础篇2 浅试Python爬虫爬取图片

本文介绍了如何使用Python3.7.6的BeautifulSoup和requests库爬取Unsplash网站的免费壁纸,通过解析HTML结构找到图片下载链接,实现批量下载图片的过程。
摘要由CSDN通过智能技术生成

使用pythono爬取图片

参考学习的原文文档

1.前置

pip install beautifulsoup4

2.确定爬取的目标地址

本次的目标网站是unsplash,主打一个分享免费壁纸的网站,每日更新。
在这里插入图片描述

3.实现原理

  • 和爬取小说类似,同样解析图片在HTML文档中的结构,拿到图片路径或者下载路径
  • 但是问题在于怎么下载 ,实现原理:
    • 使用requests.get()方法拿到图片信息,这时图片信息是二进制,然后我们在本地创建一个.jpg的文档,将二进制信息写入。

4.功能实现

  • 分析目标页面DOM
    在这里插入图片描述
    从这里我们可以看到图片都放在了figure标签里面。那好,用昨天爬小说的方法尝试解析网页结构
  • 尝试获取figure标签内容
import requests
from bs4 import BeautifulSoup
from contextlib import closing


res = requests.get('https://unsplash.com')
html = res.text
# 解析
bf = BeautifulSoup(html,'html.parser')
bf_root = bf.find_all('figure')

打印出来的结果如下
在这里插入图片描述ok正确拿到信息,再回到原网页分析图片

  • 继续分析页面图片路径
    在这里插入图片描述
    可以看到图片的下载路径直接包含在a标签里面,这样更简单了,只要解析出来a标签中的href就行了
  • 解析a标签
  • figure标签中有多个a标签,所以为了准确获取,这里最好在解析一下,保证结果正确

控制行打印的html文档可视性极差,可以将上一步figure打印结果复制到编辑器分析
在这里插入图片描述
这样们就能精确的拿到目标下载标签的上一级 div的类名

# 解析figure中的div
bf_div = BeautifulSoup(str(bf_root),'html.parser')
bf_a = bf_div.find_all('div','sBV1O')
# 解析a标签
bf_target = BeautifulSoup(str(bf_a),'html.parser')
a = bf_target.find_all('a')

打印结果如下
在这里插入图片描述

5.最后写入

# _*_ coding:UTF-8 _*_

import requests
from bs4 import BeautifulSoup
from contextlib import closing


res = requests.get('https://unsplash.com')
html = res.text
# 解析
bf = BeautifulSoup(html,'html.parser')
bf_root = bf.find_all('figure')
# 解析figure中的div
bf_div = BeautifulSoup(str(bf_root),'html.parser')
bf_a = bf_div.find_all('div','sBV1O')
# 解析a标签
bf_target = BeautifulSoup(str(bf_a),'html.parser')
a = bf_target.find_all('a')
# 遍历一下a标签
for item in a:
  # 下载
  with closing(requests.get(item.get('href'))) as r:  # 获取图片信息
    with open('%s.jpg' % item.get('href')[28:39] ,'ab+') as f:   #创建一个jpg文档,我这里截取了下载链接的字符串作为名字
      for chunk in r.iter_content(chunk_size=1024):  # 读取图片信息
        if chunk:
          f.write(chunk)   # 向创建的图片文档中写入读取的图片信息
          f.flusha

下载速度比较慢

  • 成果展示在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值