1、概括
本文主要使用python编程,使用requests库获取网页内容,利用BeautifulSoup实现html文本解析查找我们想要得数据信息,使用pandas最终将我们获取得数据持久化存储到txt文本文件中。
3、预习
在开始案例之前,我们来掌握一下主要使用到的api接口:
# url:网址
# headers:请求头数据字典
# return:返回网页信息
requests.get(url=url, headers=headers)
# dl:标签名称
# attrs:标签的属性及属性值字典
# return:返回其全部的查到符合要求的数据节点
bs1.find_all('dl',attrs={'class':'roleIntrodcution-descritpion'})
注意:find_all使用前是需要使用BeautifulSoup转化requests的文本内容
4、分析
我们需要对其网址的html进行分析,F12查看其中角色名、演员名、介绍、图片的节点标签名和节点的class属性值或者id值 ,从而获取其所在位置数据。通过F12查看元素可看到除了图片网址其他信息都在其节点内部dl标签,class为roleIntrodcution-descritpion的父节点下。同样的方式我们分别查看一下角色名称、演员名称、介绍信息的对应节点。
# 角色名
find_all('div',attrs={'class':'role-name'})
# 演员名
find_all('div',attrs={'class':'role-actor'})
# 描述
find_all('dd',attrs={'class':'role-description'})
# 图片信息
find_all('a',attrs={'class':'roleIntrodcution-picture'})
5、案例实现
#导包
import requests
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'
}
url = 'https://baike.baidu.com/item/%E5%8A%9F%E5%8B%8B/24265662?fr=aladdin#8'
response = requests.get(url=url, headers=headers)
#step_3:获取响应数据:通过调用响应对象的text属性
page_text = response.text
from bs4 import BeautifulSoup
bs1 = BeautifulSoup(page_text, 'html.parser')
# 名称
name = []
# 演员名称
real_name = []
# 介绍
instruct=[]
for i in bs1.find_all('dl',attrs={'class':'roleIntrodcution-descritpion'}):
for j in i.find_all('div',attrs={'class':'role-name'}):
name.append(j.text.replace('\n',''))
for j in i.find_all('div',attrs={'class':'role-actor'}):
real_name.append(j.text.replace('\n','').replace('演员',''))
for i in bs1.find_all('dd',attrs={'class':'role-description'}):
instruct.append(i.text.replace('\n',''))
# 照片下载路径
pic = []
for i in bs1.find_all('a',attrs={'class':'roleIntrodcution-picture'}):
pic.append(i.find('img').get('src'))
data={'角色姓名':name,'演员':real_name,'角色简介':instruct,'角色剧照':pic}
import pandas as pd
df = pd.DataFrame(data,columns=['角色姓名', '演员','角色简介','角色剧照'])
df.to_csv('data.txt', sep=' ',index=False)
6、结果
# data.txt 文件名
# sep列分格
# index是否显示索引
df.to_csv('data.txt', sep=' ',index=False)