学习目标:
学习BeautifulSoup 进行数据爬取
总的来说就是:
**
创建对象–使用对象–分析数据–处理数据–保存数据
**
学习内容:
BS4主要方法讲解与实例演示
import requests
from bs4 import BeautifulSoup
import time
#BS4学习
#首先创建一个soup对象
# soup = BeautifulSoup(page.text,"html.parse")#page.text--页面数据 html.parse--页面类型
#利用soup对象进行匹配数据
# tag = soup.find("div",class_ = "xxx")#"div",class_ = "xxx"----"CSS选择器表达式"
#主网址
domain = "https://www.umeitu.com/weimeitupian/yijingtupian/"
#请求头,防止被识别成茶壶
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.47"
}
#请求1,获取到主网址的html数据
resp1 = requests.get(url=domain,headers=headers)
resp1.encoding = 'utf-8' #查看页面是utf_8,所以做一个编码,防止乱码
result1 = resp1.text #将主页面的数据存给result1
# print(result1)
#把源代码交给BS4
main_page = BeautifulSoup(result1,'html.parser')
alist = main_page.find("ul",class_ = "pic-list after").find_all("a") #获取到主页面我们需要的图片的地址。是一个列表
# print(alist)
for a in alist: #循环列表,得到每一张图片的地址
# print(a.get("href"))
href = domain.replace('/weimeitupian/yijingtupian/','') + a.get("href")
# print(href)
#再来一次,获取到每个子页面的响应数据
resp2 = requests.get(url=href,headers=headers)
result2 = resp2.text
child_page = BeautifulSoup(result2,'html.parser')
child_alist = child_page.find("section",class_ = "img-content")
# print(child_alist)
#获取到每一张图片的地址
child_img_src = child_alist.find("img").get("src")
# print(child_img_src)
#请求每一张图片的地址,进行下载
child_img_resp = requests.get(child_img_src)
#把地址的后部分变成图片名,防止重复
child_img_name = child_img_src.split("/")[-1]
# print(type(str(child_img_name)))
#写入文件夹里面
with open("img/" + child_img_name,mode="wb") as f:
f.write(child_img_resp.content)
print("over!!!",str(child_img_name))
time.sleep(1)
print("all over!!!")