美文网首页大数据 爬虫Python AI Sql爬虫专题
使用 BeautifulSoup 爬取国家地理的图片

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

作者: _月光临海 | 来源:发表于2018-10-04 01:09 被阅读7次

一、导入工具

from bs4 import BeautifulSoup as BS
import requests
import 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_listul 标签中
我们要爬取的图片
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 BS
import requests
import 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)
图片在这

之所以有六张是因为网页中有个【查看更多】

相关文章

网友评论

    本文标题:使用 BeautifulSoup 爬取国家地理的图片

    本文链接:https://www.haomeiwen.com/subject/cxitaftx.html