一、导入工具
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
随时随地看视频