大家好,小编来为大家解答以下问题,Python数据分析方法有哪几种,python进行数据分析的方法,今天让我们一起来看看吧!
一、正则表达式
1.介绍
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个 “规则字符串”,这个 “规则字符串” 用来表达对字符串的一种过滤逻辑。
2.环境安装
pip install re
3.通配符(分别按使用分类)
(1)数量
1)匹配0个或1个字符(?)
表示前面一个字符可有可无
例:abc?(c可有可无,可匹配ab,abc等);
2)匹配0个或多个字符(*)
表示前面一个字符可以出现任意次数
例:ab*c(可以匹配ac,abc,abbc等);
3)匹配1个或多个字符(+)
表示前面一个字符可以出现任意次数
例:ab+c(可以匹配abc,abbc等);
4)(字符){N}'表示字符重复N次
(字符){N,M}'表示随便重复N到M次
(2)单字符
1)'[A-Z]'表示A-Z任意一个
'[a-z]'表示a-z任意一个
'[0-9]'表示0-9任意一个
2) 除外符(^)
匹配不是后面的字符
例:^[a-c](匹配不是字母a-c的字符)
3) 任意字符(.)
表示匹配任意字符(匹配真正的点时前面加反斜杠(\))
例:.*(表示匹配任意一个字符出现任意次)
4)元字符(系统自带)
大多以“\”开头
'\w'表示任意一个字母或数字及下划线(同[0-9A-Za-z])
‘\W’表示代表一个非字母字符
'\d'表示任意一个数字(同[0-9])
‘\D’表示代表一个非数字字符
‘\s’表示空白字符(空格,tab,换行符等)
‘\S’表示代表一个非空白字符
5) 匹配“或”运算(|)
匹配两者中之一即可
例:cat|dog(匹配cat或者dog)
(3)匹配行首行尾(^、$)
^a匹配行首的a,$a匹配行尾的a
(4)分组(用括号括起来)
例如:ab(.*?)cd匹配以ab开头以cd结束的任意字符串
(5)匹配模式
贪婪匹配(.*):趋向于最大长度匹配,匹配所有字符
懒惰匹配(.*?):只匹配符合条件的串
注:
re.I表示不区分大小写
re.M表示多行匹配
re.S表示单行匹配(在数据解析中常用)
import re#导入re模块
#以下是re模块常用方法
m=re.match(s,'igrout') #match方法匹配是否完全相等(第一参数为文本匹配模式,第二参数为字符串)
print(m,m.group())
#group方法返回匹配成功的字符串
n=re.search(s,'imap') #search方法匹配是否搜索到字符串
c=re.findall('bike','bike,bike',re.I)
#findall函数返回一个所有匹配成功项目的列表
result=re.sub('bill','mike','bill is my son')
#第一个参数是要替换的串,第二个参数是要替换成的串
s=re.split(';','bill;mike',maxsplit=1)
#第一个参数是分隔符,第二个参数是要分割的串,第三个参数指定最大分割次数(maxsplit=\d)
#split()方法返回一个包含分割后元素的列表
二、bs4
1python工程师考什么证书。原理:
(1)实例化一个BeautifulSoup对象,并且将页面源码数据加载到该对象中
(2)通过调用BeautifulSoup对象中相关的属性或者方法进行标签定位和数据提取
2.环境安装:
pip install bs4
pip install lxml
3.对象的实例化:
(1)将本地的html文档中的数据加载到该对象中:
fp=open(‘./文件名.html’,‘r’)
Soup=BeautifulSoup(fp, ‘lxml’)
(2)将互联网上获取的页面源码加载到该对象中:(更方便)
Page_text=response.text
Soup=BeautifulSoup(page_text, ‘lxml’)
4.数据解析的方法和属性:
——soup.标签名:返回的是文档中第一次出现的该标签名称的内容
——soup.find():
——find(‘标签名’):等同于soup.标签名
——属性定位:
Soup.find(‘标签名’,class_/id/attr=‘标签标识’)
——soup.findAll(‘标签名称’):返回所有标签内容(列表)
——soup.select():
——soup.select(‘选择器’(id,class,标签等))(列表)
——层级选择器:
——soup.select(‘.父标签>子标签>子子标签’):
“>”表示的是一个层级(加点是为了表示这是根节点)
——soup.select(‘.父标签 子子标签’):
“空格”表示的是多个层级
获取标签之间的文本数据(属性/方法):
——soup.标签名.text/string/get_text()
——text/get_text():可以获取某一个标签中的所有内容
——string:只可以获取该标签直系的文本内容
获取标签中属性值:
——soup.标签名[属性名]
from bs4 import BeautifulSoup #导入BeautifulSoup模块
#1.把页面源代码交给BeautifulSoup进行处理,生产bs对象
html=BeautifulSoup(resp.text,"html.parser") #指定用html解析码
#2.从bs对象中查找数据
data1=html.find_all("table",class_="f_s_14")#返回数据是列表
三、Xpath解析
Xpath解析:最常用且最便捷高效的一种解析方式,具有通用性。
注:Xpath解析返回值是列表
——xpath解析原理:
——1.实例化一个etree对象,且需要将被解析的页面源码数据加载到该对象中。
——2.调用etree对象中的xpath方法结合着xpath表达式实现标签的定位和内容的捕获。
——环境的安装:
——pip install lxml
——如何实例化一个etree对象:from lxml import etree
——1.将本地的html文档中的源码数据加载到etree对象中:
etree.parse(html文件名)
——2.可以将从互联网上获取的源码数据加载到该对象中
etree.HTML(源码数据)
——xpath表达式【xpath(xpath表达式)】:
——/:表示的是一个层级(放在所有标签开头表示根标签)。
——//:表示的是多个层级(即可以从任意层级定位)。
——属性定位://标签名[@属性名=属性值]
——索引定位://标签名[@属性名=属性值]/子标签名[索引]
注:索引从1开始
——取文本:
——标签名/text()获取的是标签中直系的文本内容
——标签名//text()获取的是标签中非直系的文本内容(所有内容)
——取属性:
标签名/@属性名
注意:xpath表达式可以用逻辑运算符连接(或|、和&等),当要批量获取的数据不在同一个标签位置时可以使用这个。
例如:tree.xpath(“//div/ul | //div/li”)表示既可以解析div标签下ul标签的内容也可解析div下li标签的内容
注:服务器返回的html源码不一定包含有tbody标签,所以在使用xpath表达式时如果包含有tbody这一级标签,尽量将其去掉。
from lxml import etree#导入包
tree1=etree.parse(filepath)#filepath是html文档的路径
tree2=etree.HTML('page_text')#page_text是获取的响应数据
tree1.xpath('//div[@class="属性名称"]')
tree2.xpath('//div[@class="属性名称"]')