目录
3.1、节省时间,只运行了一下下,把爬取到的图片保存到文件内,并按我们规定的名称进行保存。
4.1.1:使用bs4对象.find_all()函数(未使用遍历),会出现报错:具体报错啥忘了,
一、bs4简介
全称:BeatifulSoup;
作用:解析页面源代码,提取页面内容;
本次使用的bs4函数:bs4对象.find(),bs4对象.find_all();BeatifulSoup();bs4对象.get(“属性值”);四个函数
BeatifulSoup()函数:使用方法为:BeatifulSoup(页面源代码,“页面源代码格式”),用法如下
result1 = BeautifulSoup(resp_content1, "html.parser")
返回的resulut1是一个bs4对象;
bs4对象.find()函数:查找第一个符合要求的数据并返回,使用方法为:bs4对象.find(“标签名”, 标签属性=“值”)->简单用法,如下
li1 = result2.find("div", class_="TypeList")
返回的li1是一个bs4对象,并且范围缩小为div标签;
bs4对象.find_all()函数:查找全部符合要求的数据并返回,使用方法为:bs4对象.find(“标签名”, 标签属性=“值”)->简单用法,如下
all_a = it2.find_all("a", class_="TypeBigPics")
返回的all_a是一个包含全部符合筛选要求的数据的列表,在使用时需要进行遍历取出,使用方法如下:
all_a = it2.find_all("a", class_="TypeBigPics")
for it3 in all_a:
x += 1
all_img = it3.find("img")
all_src = all_img.get("src")
bs4对象.get()函数使用:bs4对象.get(“属性值”),使用方法如下:
all_img = it3.find("img")
all_src = all_img.get("src") # 取出img标签的src值
二、步骤
2.1、准备好运行环境:
系统:win10家庭版,编辑器:pycharm edu
需要的库:requests、bs4、time
需要知道怎么看是get请求,还是post请求或者其它提交参数的请求。
2.2、下载bs4:
如下图,2.2.1/2.2.2/2.2.3
图2.2.1
图2.2.2
图2.2.3
等待几分钟即下载完成。
2.3、上手操作
2.3.1、确定目标主页面源代码截图与子页面源代码截图:
如何查看页面源代码呢?
在网页随便一个地方鼠标右键点击,查看页面源代码。如下图2.3.1
图2.3.1
主页面源代码:
子页面源代码:
本次目标:
# 优美图库
# 1、拿到主页面源代码,交给bs4
# 2、拿到子页面源代码,交给bs4
# 3、拿到图片链接,下载,保存到文件或者数据库(正在学习)
下面的代码都是基于要爬取的页面源代码进行分析。
2.3.2、核心的思路:
1、第一次发起请求,进入主页面源代码,生成bs4对象,使用上面的两个函数缩小范围,拿到我们需要的内容,不是链接的则拼接成链接;
2、第二次发起请求,进入子页面源代码,生成bs4对象,使用上面的两个函数缩小范围,拿到我们需要的内容,第三次发起请求,进行下载所需内容,并保存。
2.4、导库
# 导入需要使用的库
import requests
from bs4 import BeautifulSoup
import time
2.5、发起请求
url1 = "http://www.umeituku.com/"
# 发送请求,获取源码
resp1 = requests.get(url1)
resp1.encoding = 'utf-8'
resp_content1 = resp1.text
2.6、生成bs4对象
# 把源码给bs4,进行处理
result1 = BeautifulSoup(resp_content1, "html.parser")
2.7、第一次定位
# 定位
alist1 = result1.find("div", class_="SpecBox indexSpec fc").find("a")
href = alist1.get("href")
url2 = "http://www.umeituku.com/" + href
# print(url2) http://www.umeituku.com//tags/shaofu.htm
2.8、第二次发起请求并生成bs4对象
# 第二次发起请求
resp2 = requests.get(url2)
resp2.encoding = 'utf-8'
resp2_content = resp2.text
result2 = BeautifulSoup(resp2_content, "html.parser")
# print(result2) 拿到子页面源码
2.9、子页面第一次定位
li1 = result2.find("div", class_="TypeList").find_all("li")
# print(li1) # 范围缩小到li,[<li>...]
2.10、子页面最终定位与提取
x = 0 for it2 in li1: all_a = it2.find_all("a", class_="TypeBigPics") for it3 in all_a: x += 1 all_img = it3.find("img") all_src = all_img.get("src") src_resp = requests.get(all_src) src_content = src_resp.content img_name = "img{}.jpg".format(x)
2.11、下载图片与保存
with open("img_meinv/"+img_name, mode="wb") as f:
f.write(src_content)
time.sleep(3)
print("img{}下载完成".format(x))
2.12、主函数入口
if __name__ == '__main__':
down_img()
print("爬取结束")
三、结果
3.1、节省时间,只运行了一下下,把爬取到的图片保存到文件内,并按我们规定的名称进行保存。
四、问题与总结
4.1、问题:
4.1.1:使用bs4对象.find_all()函数(未使用遍历),会出现报错:具体报错啥忘了,
解决方法:在使用bs4对象.find_all()函数时,提取下一个标签的内容一定要使用遍历(for循环即可)才能取出内容(因为返回的是一个列表)。