栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

使用 BeautifulSoup 爬取国家地理的图片

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用 BeautifulSoup 爬取国家地理的图片

一、导入工具
from bs4 import BeautifulSoup as BSimport requestsimport os

1、从 bs4 中导入 BeautifulSoup,并且命名为 BS,中文文档
2、导入 requests,用于发出请求,中文文档
3、导入 os 用于文件操作,这里用来存图片,英文文档


二、定义变量
URL = "http://www.ngchina.com.cn/animals/"html = requests.get(URL).text
soup = BS(html, 'lxml')
img_ul = soup.find_all('ul', {"class": "img_list"})
os.makedirs('./img/', exist_ok=True)

1、URL 是 国家地理动物系列的主页地址
2、通过 requests.get(URL) 获取到目标页面的 requests 对象,这个对象的文本内容在 text 属性上,html 是目标页面的 html 文本结构

就是这个东西


如果想看一下 requests 对象都含有哪些属性和方法可以使用 dir(),比如:print(dir(requests))


3、使用 BS 解析获取到的 html,采用第三方解析器 lxml(这玩意得安装:pip install lxml)
4、通过查看国家地理网页结构后得知图片在类名为 img_list 的 ul 标签中

我们要爬取的图片


5、makedirs 方法是递归创建。在当前目录下(./ 代表当前目录)创建 img 目录,exist_ok=True 意味着如果已经有 img 目录,就直接使用这个文件夹;exist_ok=False 则是如果之前已经有了 img 目录则报错;



三、获取到 img 标签并将图片转存到之前创建的 img 目录中

这部分直接在代码里说明

for ul in img_ul:
    imgs = ul.find_all('img')       # 在 ul 标签中找到 img 标签,其实下面也可以不用循环,因为这个页面中,每个 ul 只有一个 img
    for img in imgs:
        url = img['src']            # 获取到 img 标签的 src 属性,即图片地址
        r = requests.get(url, stream=True)  # stream=True 使用流的方式下载,目的是实现边下边存,而不是下载完了再存
        image_name = url.split('/')[-1]     # 这是给图片命名
        with open('./img/%s' % image_name, 'wb') as f:            for chunk in r.iter_content(chunk_size=128):    # 128个单位作为一个块
                f.write(chunk)
        print('Saved %s' % image_name)

四、完整代码
from bs4 import BeautifulSoup as BSimport requestsimport os

URL = "http://www.ngchina.com.cn/animals/"html = requests.get(URL).text
soup = BS(html, 'lxml')
img_ul = soup.find_all('ul', {"class": "img_list"})
os.makedirs('./img/', exist_ok=True)for ul in img_ul:
    imgs = ul.find_all('img')       # 在 ul 标签中找到 img 标签,其实下面也可以不用循环,因为这个页面中,每个 ul 只有一个 img
    for img in imgs:
        url = img['src']            # 获取到 img 标签的 src 属性,即图片地址
        r = requests.get(url, stream=True)  # stream=True 使用流的方式下载,目的是实现边下边存,而不是下载完了再存
        image_name = url.split('/')[-1]     # 这是给图片命名
        with open('./img/%s' % image_name, 'wb') as f:            for chunk in r.iter_content(chunk_size=128):    # 128个单位作为一个块
                f.write(chunk)
        print('Saved %s' % image_name)

图片在这



作者:_白衣青衫_
链接:https://www.jianshu.com/p/3e1a250524e6


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/221958.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号