1.大数据的加工处理过程
数据采集→数据清洗→数据集成→数据转化→数据脱敏
也可能考(典型的数据分析过程):
数据采集与预处理→数据存储与管理→数据处理与分析→数据可视化
2.数据采集的作用、格式、任务、数据结构。
作用:通过各种技术手段对外部各种数据源产生的数据实时或非实时地进行采集并加以利用。
格式:结构化数据、半结构化数据、非结构化数据
任务:这个答啥没想明白(采集方法:系统日志采集、分布式消息订阅分发、ETL、网络数据采集)
或者说:
网页抓取:使用网络爬虫从网页上提取信息。
API接口集成:通过调用API获取数据。
文件导入:从CSV、Excel等文件中读取数据。
实时监测:持续收集设备或传感器产生的实时数据。
数据结构:
数组、栈、队列、哈希表/字典。、链表、树和图(不是书上找的慎写)
或者是答数据类型(文本、图片、音频、视频)
3.数据的概念
数据是对客观事物的性质、状态以及相互关系等进行记载的物理符号或这些物理符号的组合,这些符号是抽象的、可识别的。
4.数据的组织形式
文件、数据库
5.数据清洗的作用
将大量原始数据中的“脏”数据“洗掉”,它是发现并纠正数据文件中可识别的错误的最后一道程序,包括检查数据一致性、处理无效值和缺失值等。
6.数据脱敏的作用
数据脱敏是在给定的规则、策略下对敏感数据进行变化、修改的技术。能够在很大程度上解决敏感数据在非可信环境中使用的问题。
7.HTML网页的结构
<html>
<head>
<title>标题</title>
</head>
<body>
内容
</body>
</html>
html标签:根标签/根元素 所有的内容都要写在html标签内,一个页面只有一个html标签
head标签:头部标签 帮助浏览器解析页面,这里面的内容不会被浏览器解析到页面中。
title标签:网页的标题
body标签:书写网页的主体内容,这里面的内容会被解析到页面,也就是说用户看到的所有的内容都是写在body标签内
8.Beautifulsoup的作用
Beautifulsoup提供一些简单的,Python式的函数来处理导航、搜索、修改分析树等。
9.Beautifulsoup的四大对象
Tag对象、NavigableString对象、BeautifulSoup对象、Comment对象
10.使用BeautifulSoup遍历元素
index.html网页的源代码如下:
<html>
<head>
<title>测试页</title>
</head>
<body>
<p id="list">网站列表</p>
<p class="txt">百度 - Baidu</p>
<a href="http://www.baidu.com" class="site">百度</a><br/>
<p class="txt">腾讯 - Tencent</p>
<a href="http://www.tencent.com" class="site">腾讯</a><br/>
<p class="txt">搜狐 - Sohu</p>
<a href="http://www.sohu.com" class="site">搜狐</a><br/>
<p class="txt">湘潭理工学院</p>
<a href="http://www.xtit.edu.cn" class="home">
<img src="xtit.png" alt="暂无图片" height="50px" style="background-color: gray;">
</a>
</body>
</html>
可以通过系列属性获得节点的子节点、子孙节点等。
用法 | 说明 |
soup.标签名称.contents | 返回标签的子节点列表 |
soup.标签名称.children | 返回标签的子节点列表 |
soup.标签名称.descendants | 返回标签的子孙节点列表 |
soup.标签名称.strings | 返回标签的子孙节点的文本 |
soup.标签名称.stripped_strings | 返回标签的子孙节点的文本,去掉空白行的标签内的内容 |
soup.标签名称.parent | 返回标签的直接父节点 |
soup.标签名称.parents | 返回标签的直接父节点到根节点的所有节点 |
soup.标签名称.next_sibling | 返回标签的下一个兄弟节点 |
soup.标签名称.previous_sibling | 返回标签的上一个兄弟节点 |
soup.标签名称.next_siblings | 返回标签的后继兄弟节点列表 |
soup.标签名称.previous_siblings | 返回标签的前驱兄弟节点列表 |
soup.标签名称.next_element | 返回标签的不分层次的下一个后继元素 |
soup.标签名称.previous_element | 返回标签的不分层次的上一个前驱元素 |
soup.标签名称.next_elements | 返回标签的不分层次的后继元素列表 |
soup.标签名称.previous_elements | 返回标签的不分层次的前驱元素列表 |
遍历直接子节点
(1)在Exam03文件夹中新建exam12.py文件。
(2)编辑exam12.py文件:
import requests
from bs4 import BeautifulSoup
# 读取网页,获得HTML代码
url = "D:/2023学年第2学期/数据采集与预处理/源代码/Exam03/index.html"
response = open(url, "r", encoding="utf-8")
html = response.read()
soup = BeautifulSoup(html, "lxml")
# 遍历body标签的所有子节点
for elem in soup.body.contents:
print(elem)
遍历子孙节点
(1)在Exam03文件夹中新建exam13.py文件。
(2)编辑exam13.py文件:
import requests
from bs4 import BeautifulSoup
# 读取网页,获得HTML代码
url = "D:/2023学年第2学期/数据采集与预处理/源代码/Exam03/index.html"
response = open(url, "r", encoding="utf-8")
html = response.read()
soup = BeautifulSoup(html, "lxml")
# 遍历body标签的所有子节点
for elem in soup.body.descendants:
print(elem)
遍历节点内容
(1)在Exam03文件夹中新建exam14.py文件。
(2)编辑exam14.py文件:
import requests
from bs4 import BeautifulSoup
# 读取网页,获得HTML代码
url = "D:/2023学年第2学期/数据采集与预处理/源代码/Exam03/index.html"
response = open(url, "r", encoding="utf-8")
html = response.read()
soup = BeautifulSoup(html, "lxml")
# 遍历body标签的所有文字,不显示空白行的内容
for elem in soup.body.stripped_strings:
print(elem)
获取直接父节点
(1)在Exam03文件夹中新建exam15.py文件。
(2)编辑exam15.py文件:
import requests
from bs4 import BeautifulSoup
# 读取网页,获得HTML代码
url = "D:/2023学年第2学期/数据采集与预处理/源代码/Exam03/index.html"
response = open(url, "r", encoding="utf-8")
html = response.read()
soup = BeautifulSoup(html, "lxml")
# 获得img标签
img = soup.img
print("父节点:\n", img.parent)
遍历祖先节点
(1)在Exam03文件夹中新建exam16.py文件。
(2)编辑exam16.py文件:
import requests
from bs4 import BeautifulSoup
# 读取网页,获得HTML代码
url = "D:/2023学年第2学期/数据采集与预处理/源代码/Exam03/index.html"
response = open(url, "r", encoding="utf-8")
html = response.read()
soup = BeautifulSoup(html, "lxml")
# 获得img标签的祖先节点列表
for elem in soup.img.parents:
print("祖先节点:\t", elem.name)
遍历兄弟节点
(1)在Exam03文件夹中新建exam17.py文件。
(2)编辑exam17.py文件:
import requests
from bs4 import BeautifulSoup
# 读取网页,获得HTML代码
url = "D:/2023学年第2学期/数据采集与预处理/源代码/Exam03/index.html"
response = open(url, "r", encoding="utf-8")
html = response.read()
soup = BeautifulSoup(html, "lxml")
# 获得a标签的兄弟节点列表
for elem in soup.a.next_siblings:
print("兄弟节点:\t", elem)
遍历前后节点
(1)在Exam03文件夹中新建exam18.py文件。
(2)编辑exam18.py文件:
import requests
from bs4 import BeautifulSoup
# 读取网页,获得HTML代码
url = "D:/2023学年第2学期/数据采集与预处理/源代码/Exam03/index.html"
response = open(url, "r", encoding="utf-8")
html = response.read()
soup = BeautifulSoup(html, "lxml")
# 获得a标签的兄弟节点列表
for elem in soup.a.next_elements:
print("后继节点:\t", elem)
11.CSS选择器用法
CSS选择器
BeautifulSoup支持大部分的CSS选择器,通过select()方法找到标签。
用法 | 说明 |
标签.select('标签名') | 返回根据标签名查找的子节点 |
标签.select('.类名') | 返回根据类名查找的子节点 |
标签.select('#id') | 返回根据id查找的子节点 |
标签.select('标签名[属性名=”属性值”]') | 返回根据指定标签的属性值查找的子节点 |
根据标签名搜索子节点
(1)在Exam03文件夹中新建exam25.py文件。
(2)编辑exam25.py文件:
import requests
from bs4 import BeautifulSoup
# 读取网页,获得HTML代码
url = "D:/2023学年第2学期/数据采集与预处理/源代码/Exam03/index.html"
response = open(url, "r", encoding="utf-8")
html = response.read()
soup = BeautifulSoup(html, "lxml")
# 通过标签名查找标签
for elem in soup.select('p'):
print("子节点:\t", elem)
根据类名搜索子节点
(1)在Exam03文件夹中新建exam26.py文件。
(2)编辑exam26.py文件:
import requests
from bs4 import BeautifulSoup
# 读取网页,获得HTML代码
url = "D:/2023学年第2学期/数据采集与预处理/源代码/Exam03/index.html"
response = open(url, "r", encoding="utf-8")
html = response.read()
soup = BeautifulSoup(html, "lxml")
# 通过类名查找标签
for elem in soup.select('.site'):
print("子节点:\t", elem)
根据id搜索子节点
(1)在Exam03文件夹中新建exam27.py文件。
(2)编辑exam27.py文件:
import requests
from bs4 import BeautifulSoup
# 读取网页,获得HTML代码
url = "D:/2023学年第2学期/数据采集与预处理/源代码/Exam03/index.html"
response = open(url, "r", encoding="utf-8")
html = response.read()
soup = BeautifulSoup(html, "lxml")
# 通过id查找标签
for elem in soup.select('#list'):
print("子节点:\t", elem)
根据属性值搜索子节点
(1)在Exam03文件夹中新建exam28.py文件。
(2)编辑exam28.py文件:
import requests
from bs4 import BeautifulSoup
# 读取网页,获得HTML代码
url = "D:/2023学年第2学期/数据采集与预处理/源代码/Exam03/index.html"
response = open(url, "r", encoding="utf-8")
html = response.read()
soup = BeautifulSoup(html, "lxml")
# 通过指定标签的属性值查找标签
for elem in soup.select('a[class="home"]'):
print("子节点:\t", elem)
12.使用Beautifulsoup获取标签的文本
import requests
from bs4 import BeautifulSoup
from lxml import etree
# 读取网页,获得HTML代码
url = "D:/2023学年第2学期/数据采集与预处理/源代码/Exam03/index.html"
response = open(url, "r", encoding="utf-8")
str = response.read()
html = etree.HTML(str)
# 根据函数搜索指定属性值的a标签的文本
for elem in html.xpath('//a[contains(@class, "site")]/text()'):
print(elem)
13.使用Beautifulsoup获取属性的值
记得安装lxml库和bs4库
from bs4 import BeautifulSoup
# 读取HTML文件
html_content = """
<html>
<head>
<title>测试页</title>
</head>
<body>
<p id="list">网站列表</p>
<p class="txt">百度 - Baidu</p>
<a href="http://www.baidu.com" class="site">百度</a><br/>
<p class="txt">腾讯 - Tencent</p>
<a href="http://www.tencent.com" class="site">腾讯</a><br/>
<p class="txt">搜狐 - Sohu</p>
<a href="http://www.sohu.com" class="site">搜狐</a><br/>
<p class="txt">湘潭理工学院</p>
<a href="http://www.xtit.edu.cn" class="home">
<img src="xtit.png" alt="暂无图片" height="50px" style="background-color: gray;">
</a>
</body>
</html>
"""
# 解析HTML内容
soup = BeautifulSoup(html_content,'lxml')
# 获取所有<a>标签并打印其href属性
for link in soup.find_all('a'):
print(f"链接文本: {link.text.strip()}, URL: {link.get('href')}")
# 获取所有<p>标签并打印其class属性
for paragraph in soup.find_all('p', class_='txt'):
print(f"段落内容: {paragraph.text.strip()}, class属性: {paragraph.get('class')}")
# 获取<img>标签并打印其src和alt属性
img_tag = soup.find('img')
if img_tag:
print(f"图片URL: {img_tag.get('src')}, alt属性: {img_tag.get('alt')}")