首页
关于
Search
1
图神经网络
44 阅读
2
java期末速成
18 阅读
3
Attention2Transformer
17 阅读
4
CLIP
15 阅读
5
MySQL
15 阅读
默认分类
AI
课内
技能
Search
标签搜索
AI
CS
Tools
paper
DeepLearning
python
DATA
GNN
Transformer
晨旭不想写程序
累计撰写
16
篇文章
累计收到
2
条评论
首页
栏目
默认分类
AI
课内
技能
页面
关于
搜索到
1
篇与
的结果
2024-06-02
数据解析
数据解析在最近学习中我们学习了两种解析方法,分别是正则表达式的re解析与BeautifulSoup解析器的使用一、正则表达式正则表达式是用来避免重复工作,处理有规律信息的一个有力工具import re text = "Hi, I am Shirley Hilton. I am his wife." m = re.findall(r"hi", text) if m: print (m) else: print ('not match')这是一个小实验,通过它来看,我们不难看出这是在通过某种方法寻找"Hi, I am Shirley Hilton. I am his wife."这段话中的"hi"通过这个我们发现会有两个结果,都是hi,分别来自于Shirly与his俩单词,由此我们看出,正则表达式是严格的,区分大小写的,Hi并不满足要求。当然,不仅仅有这样的查找,也可以仅仅找部分的,比如只匹配“Hi”,在这段话中只想要计数一次,那么我们可以采用"\bHi\b"的查找对象,这样就能仅仅匹配单独的Hi啦。“\b”在正则表达式中表示单词的开头或结尾,空格、标点、换行都算是单词的分割。而“\b”自身又不会匹配任何字符,它代表的只是一个位置。所以单词前后的空格标点之类不会出现在结果里。然后[]符号的作用也很大,它的作用是表示满足括号中任一字符,例如我们想要Hi也想要hi,就可以[Hh]ir接下来继续解释这个小试验中的内容,在语句传参时的r的含义,为什么要加r?<br/>r,是raw的意思,它表示对字符串不进行转义。例如:>>> print ("\bhi") hi >>> print (r"\bhi") \bhirere是python里的正则表达式模块。findall是其中一个方法,用来按照提供的正则表达式,去匹配文本中的所有符合条件的字符串。返回结果是一个包含所有匹配的list。特殊字符这里介绍.除换行符以外的任意字符\S不是空白符的任意字符*表示前面的字符可以重复任意多次(包括0次)+表示前面的字符可以重复任意多次(不包括0次){}表示指定长度[][]内任意字符\w匹配字母或数字或下划线或汉字 \d匹配数字\s匹配空白符^ 匹配字符串的开始$匹配字符串的结束?重复零次或一次(懒惰匹配){n,}重复n次或更多次{n,m}重复n到m次很容易猜想到,如\s\S这样大小写的区分就是正反的区别,由此推出各个对应的相反,此外,[^]内通过加^就代表除此符号外任意字符.*贪婪匹配/*?懒惰匹配二、BeautifulSoup解析器[1]简介Beautiful Soup是Python的一个库,能够从网页抓取数据提供了一些函数用来处理数据,用很少的代码就能够写出来一个完整的程序。[2]特点Beautiful Soup能够自动的将文档转换为utf-8编码格式,能够更为方便的进行使用使用[1]创建对象要想创建一个Beautiful Soup对象,首先要导入库bs4,lxml,requests。这里使用一个实例html = """ <html><head><title>The Dormouse's story</title></head> <body> <p class="title" name="dromouse"><b>The Dormouse's story</b></p> <p class="story">Once upon a time there were three little sisters; and their names were <a href="http://example.com/elsie" class="sister" id="link1"><!-- Elsie --></a>, <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>; and they lived at the bottom of a well.</p> <p class="story">...</p> """ soup = BeautifulSoup(html,'lxml') #创建 beautifulsoup 对象同时也可以使用HTML文件直接创建对象soup1 = BeautifulSoup(open('index.html')) Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种:TagNavigableStringBeautifulSoupComment1>TagTag就是 HTML 中的一个个标签通过这种方法就可以直接访问标签print (soup.title) print (soup.head) print (soup.a) print (soup.p) print (type(soup.a))Tag有两个重要的属性,name与attrs并且可以对这些属性和内容进行修改2>NavigableString得到了标签的内容用 .string 即可获取标签内部的文字例如print(soup.a.string)3>BeautifulSoupBeautifulSoup 对象表示的是一个文档的全部内容.大部分时候,可以把它当作 Tag 对象,是一个特殊的 Tag,我们可以分别获取它的类型,名称:4>Comment[2]遍历文档树tag 的 .contents 属性可以将tag的子节点以列表的方式输出.children属性生成的是一个列表生成器对象,可以通过遍历获得其中的内容.descendants 属性可以对所有tag的子孙节点进行递归循环,和 children类似,要获取其中的内容,我们需要对其进行遍历还有许多关联选择方法[3]CSS选择器CSS的使用只需要调用select方法结合CSS选择器语法就可以实现元素定位格式:soup.select()1>id选择器每段节点都有专属的id,通过id就可以匹配相应的节点,使用#加id就可以实现定位2>类选择器类选择器用.来定位元素例如The Dormouse's story中的title就是类名3>标签选择器直接使用标签来定位即可例如p在定位时可以多种定位方法混合使用,达到更为理想的效果。[4]CSS高级用法1>嵌套选择因为其仍旧是一个tag对象,所以可以使用嵌套选择2>属性获取使用attrs属性3>文本获取使用string与strings获取文本信息[5]方法选择器1>find_all()方法soup传入整个HTML文档然后进行全文搜索find_all(name,attrs,recursive,text,**kwargs)name参数就是查找名字为name的节点,返回tag对象,这个传入的参数可以是字符串,可以是列表,正则,还可以是True(以此为参数可以获取所有的标签)attrs参数是查询含有接受的属性值的标签,参数形式为字典类型例如{id:'link1'}kwargs参数是接收常用的属性参数的,如id和class,参数形式是变量赋值的形式,例如(id='link1')<br/>class 是关键字,使用时应该加下划线即class_=……text参数是通过查询含有接受的文本的标签来查找的,参数形式是字符串limit参数是用于限制返回结果的数量的参数,参数形式是整数,顾名思义recursive参数是决定是否获取子孙节点的参数,参数形式是布尔值,默认是True2>find方法返回值是第一个符合条件的元素,除limit参数不存在外,其余参数都与find_all方法一致
2024年06月02日
13 阅读
0 评论
0 点赞