pyhont---信息的爬取与提取---bs4,BeautifulSoup,re库 用于对获取到的页面文本进行提取
BeautifulSoup库的理解:BeautifulSoup库是解析、遍历、维护"标签树"的功能库。
BeautifulSoup类的基本元素
Tag:标签,最基本的信息组织单元,分别使用<></>标明开头和结尾 多个同类标签只访问第一个标签
Name:标签的名字,<p>...</p>的名字是p,格式:<tag>.name
Attributes :标签的属性,字典形式的组织,格式:<tag>.attrs
NavigableString:标签内非属性字符串,格式:<tag>.string
Comment:标签内字符串的注释部分,一种特殊的Comment类型 用.string注释内容也会显示
///////
基于bs4库的遍历HTML方法:
下行遍历,上行遍历,平行遍历
标签树的下行遍历属性:
.contents 子结点的列表,将<tag>的所有儿子节点存入列表
.children 子节点的迭代类型,与contents类似,用于循环遍历儿子节点 //只能for,in中
.descendants 子孙节点的迭代类型,包含所有子孙结点,用于循环遍历
标签树的上行遍历的属性:
.parent 节点的父亲标签
.parents 节点先辈的迭代类型,用于循环遍历先辈节点
标签的平行遍历属性:(平行遍历发生在同一个父节点下的各节点间)
.next_sibling 返回按照HTML文本顺序的下一个平行节点标签
.previous_sibling 回按照HTML文本顺序的上一个平行标签
.next_siblings 迭代类型,返回按照HTML文本顺序的后续所有平行节点标签
.previous_siblings 迭代类型,返回按照HTML文本顺序的前续所有平行节点标签
////////
////////
如何将HTML友好的显示:
bs4库的prettify()方法:
该函数可在HTML每个标签后加‘\n‘
该函数也可以应用于tag中
////////
////////
信息标记一般类型种类:xml,json,yaml
信息提取的一般方法:
1、完整解析信息的标记形式,在提取关键信息
2、无视标记形式,直接搜索信息 对信息的文本查找函数即可
融合方法:结合形式解析与搜索方法,提取关键字 ...需要标记解析器及文本查找函数
///////
///////
beautifulsoup库对象的查找函数:
find_all(name,attrs,recursive,string,**kwargs) 返回一个列表类型,存储查找的结果
参数:name:对标签名称的检索字符串,可以使用列表查找多个标签,find_all(true)所有标签
attrs:对标签属性值的检索字符串,可标注属性检索 例如find_all(‘a‘,‘href‘)
recursive:是否对子孙所有节点搜索,默认值为true,false则值查找当前节点儿子的信息
string:<></>中字符串区域的检索字符串
<tag>(..)等价于<tag>.find_all(...)
soup(..)等价于soup.find_all(..)
拓展方法(参数均与find_all()相同)
find() 搜索且返回一个结果,字符串类型
find_parents() 在先辈节点中搜索,返回一个列表类型
find_parent() 在先辈节点中返回一个结果,字符串类型
find_next_siblings() 在后续平行节点搜索,返回列表类型
find_next_sibling()
find_previous_siblings()
find_previous_sibling() 在前序平行节点中返回一个结果,字符串类型
/////////
正则表达式:通用的字符串表达框架,判断某字符串的特征归属,用来简洁表达一组字符串的方式
一般用于表达文本类型特征
同时查找或替换一组字符串
匹配字符串的全部或部分(主要)
正则表达式的使用:
编译:将符合正则表达式语法的字符串转换正则表达式特征
正则表达式的语法:由字符与操作符组成
正则表达式类型
raw string(原生字符串类型:不包含转义字符的字符串) 表示为 r‘text‘
string 类型
Re库 主要用于字符串匹配
Re库的主要功能函数
re.search(pattern,string,flag=0)在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象
re.match() 在一个字符串的开始位置起匹配正则表达式,返回match对象 注意match为空
re.findall()搜索字符串,一列表类型返回全部能匹配的子串
re.split()将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
re.finditer() 搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象
re.sub()在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串
re.compile(pattern,flags) 将正则表达式的字符串形式编译成正则表达式对象
match对象
属性
string 待匹配文本
re 匹配时使用的pattern对象(正则表达式)
pos 正则表达式搜索文本的开始位置
endpos 正则表达式搜索文本的结束为止
方法
.group(0) 获得匹配后的字符串
.start() 匹配字符串在原始字符串的开始位置
.end() 匹配字符串在原始字符串的结束位置
.span() 返回(.start(),.end())元组类型