一、导入工具
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
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦