数据解析
分类:
1.正则表达式
2.bs4解析
3.xpath解析
原理概述:
解析的局部文本内容都会存储于标签之间或标签对应的属性中
解析步骤:
①进行指定标签的定位
②标签或者标签对应的属性中存储的数据值进行提取(解析)
编码流程:
①指定url
②发起请求
③获取响应数据
④数据解析
⑤持久化存储
①正则表达式
Ⅰ.常用正则表达式
Ⅱ.正则练习
import re
#####################################################################
#提取出python
key="javapythonc++php"
re.findall('python',key)[0]
#####################################################################
#提取出hello world
key="
hello world
"
re.findall('(.*)',key)[0]
#####################################################################
#提取155
string = '我喜欢身高为155的女孩'
re.findall('\d+',string)
#####################################################################
#提取出http://和https://
key='http://www.baidu.com and https://boob.com'
re.findall('https?://',key)
#####################################################################
#提取出hello
key='lalalahellohahah' #输出hello
re.findall('<[Hh][Tt][mM][lL]>(.*)',key)
#####################################################################
#提取出hit.
key='bobo@hit.edu.com'#想要匹配到hit.
re.findall('h.*?\.',key)
#####################################################################
#匹配sas和saas
key='saas and sas and saaas'
re.findall('sa{1,2}s',key)
#####################################################################
关于正则表达式的项目案例:
需求1:爬取一张图片
①分析
②代码:
import requests
if __name__ == "__main__":
# 如何爬取图片数据
# 指定图片url
url = 'https://pic.qiushibaike.com/article/image/AP98M8MVO5GTFUTM.jpg'
# UA伪装
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/92.0.4515.131 Safari/537.36'}
# content返回的是二进制形式的图片数据
# text(字符串)、content(二进制)、json()(对象)
# 发送请求并获取响应数据
img_data = requests.get(url=url, headers=headers).content
# 持久化存储
with open('./tupian.jpg', 'wb') as fp:
fp.write(img_data)
③结果:
需求2:获取https://www.qiushibaike.com/article/124623347中的所有图片
①分析
九张图片是在如图所示框起来的div标签中,且图片格式一致
②代码
import requests
import re
import os
if __name__ == "__main__":
# 创建一个文件夹用于保存所有的图片
if not os.path.exists('./tupian'):
os.mkdir('./tupian')
# 指定页面url
url = 'https://www.qiushibaike.com/article/124623347'
# UA伪装
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/92.0.4515.131 Safari/537.36'}
# 使用通用爬虫对url对应的一整张页面进行爬取
page_text = requests.get(url=url, headers=headers).text
# 使用聚焦爬虫将页面中所有的图片进行爬取
# 正则表达式,用来去验证其他的字符串
img_url = re.compile(r'<img src="(.*?)" alt="这届网友太优秀了,哈">')
# 前面字符串是规则(正则表达式),后面字符串是被校验的字符串
img_list = re.findall(img_url, page_text)
# print(img_list)
for img in img_list:
# 拼接出一个完整的图片url
img = 'https:'+img
# 请求到了图片的二进制数据
img_data = requests.get(url=img, headers=headers).content
# 生成图片名称
img_name = img.split('/')[-1]
# 图片存储的路径
img_path = './tupian/'+img_name
with open(img_path, 'wb') as fp:
fp.write(img_data)
print(img_name, '下载成功!')
③结果
②bs4解析:
Ⅰ.解析步骤:
- 实例化一个BeautifulSoup的对象,并且将页面源码数据加载到该对象中
- 通过调用BeautifulSoup对象中相关的属性或者方法进行标签定位和数据提取
Ⅱ.环境安装
- pip install bs4
- pip install lxml
(lxml是一种解析器)
若安装时出错可能是安装源的问题
解决方法:
- 需要将pip源设置为国内源,阿里源、豆瓣源、网易源等
- windows
(1)打开文件资源管理器(文件夹地址栏中)
(2)地址栏上面输入 %appdata%
(3)在这里面新建一个文件夹 pip
(4)在pip文件夹里面新建一个文件叫做 pip.ini ,内容写如下即可
[global]
timeout = 6000
index-url = https://mirrors.aliyun.com/pypi/simple/
trusted-host = mirrors.aliyun.com - linux
(1)cd ~
(2)mkdir ~/.pip
(3)vi ~/.pip/pip.conf
(4)编辑内容,和windows一模一样
- windows
- 需要安装:pip install bs4
bs4在使用时候需要一个第三方库,把这个库也安装一下
pip install lxml
Ⅲ.实例化BeautifulSoup对象:
- 导入包 form bs4 import BeautifulSoup
- 对象的实例化
1.将本地的html文档中的数据加载到该对象中
(需要拥有一个本地的html文档)
以下过程中会用到的我的本地html文档<!DOCTYPE html> <html> <head>