python解析库简单使用方法

python解析常用库的语法

xpath

image-20210106214308980

image-20210106214415907

image-20210106214439160

image-20210106214508242

image-20210106214620173

Beautifulsoup

'''
html_doc = """ 
<html> 
    <head> 
        <title>The Dormouse's story</title> 
    </head> 
    <body> 
    <p class="title aq"> 
        <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> 
    </body>
</html>
'''
soup = BeautifulSoup(html)#创建对象
print(soup.prettify())#打印一下 soup 对象的内容,格式化输出
print(soup.title)# 输出第一个 title 标签
print(soup.title.name)#输出第一个 title 标签名称
print(soup.title.string)# 输出第一个 title 标签的包含内容
print(soup.p['class'])# 输出第一个 p 标签的 class 属性内容
print(soup.get_text())# 获取所有文字内容
print(soup.find_all('a'))# 输出所有的 a 标签,以列表形式显示
print(soup.a.attrs)# 输出第一个  a 标签的所有属性信息
for child in soup.p.children:
    # 对soup.p的子节点进行循环输出
    print("对soup.p的子节点进行循环输出", child)
for tag in soup.find_all(re.compile(r"b")):
    # 正则匹配,名字中带有b的标签
    print(tag.name)

四大属性

  1. Tag (HTML 中的一个个标签)
  2. NavigableString (获取标签内部的文字 .string)
  3. BeautifulSoup
  4. Comment

遍历子节点:

  • .contents
  • .children

遍历子孙节点:

  • .discendents

节点内容

  • .string
  • .strings

父节点

  • .parent
  • .parents

兄弟节点

  • .next_siblings

函数

  • find_all(传输)
    • name
    • keyword
    • text
    • list
    • 方法

re

https://docs.python.org/zh-cn/3/library/re.html

  • 检索:
    • . 匹配任意字符(不包括换行符)
    • ^ 匹配开始位置,多行模式下匹配每一行的开始
    • $ 匹配结束位置,多行模式下匹配每一行的结束
    • * 匹配前一个元字符0到多次
    • + 匹配前一个元字符1到多次
    • ? 匹配前一个元字符0到1次
    • {m,n} 匹配前一个元字符m到n次
    • 转义字符,跟在其后的字符将失去作为特殊元字符的含义,例如.只能匹配.,不能再匹配任意字符
    • [] 字符集,一个字符的集合,可匹配其中任意一个字符
    • | 逻辑表达式 或 ,比如 a|b 代表可匹配 a 或者 b
    • (...) 分组,默认为捕获,即被分组的内容可以被单独取出,默认每个分组有个索引,从 1 开始,按照"("的顺序决定索引值
    • (?iLmsux) 分组中可以设置模式,iLmsux之中的每个字符代表一个模式,用法参见 模式 I
    • (?:...) 分组的不捕获模式,计算索引时会跳过这个分组
    • (?P...) 分组的命名模式,取此分组中的内容时可以使用索引也可以使用name
    • (?P=name) 分组的引用模式,可在同一个正则表达式用引用前面命名过的正则
    • (?#...) 注释,不影响正则表达式其它部分,用法参见 模式 I
    • (?=...) 顺序肯定环视,表示所在位置右侧能够匹配括号内正则
    • (?!...) 顺序否定环视,表示所在位置右侧不能匹配括号内正则
    • (?<=...) 逆序肯定环视,表示所在位置左侧能够匹配括号内正则
    • (?<!...) 逆序否定环视,表示所在位置左侧不能匹配括号内正则
    • (?(id/name)yes|no) 若前面指定id或name的分区匹配成功则执行yes处的正则,否则执行no处的正则
    • umber 匹配和前面索引为number的分组捕获到的内容一样的字符串
    • A 匹配字符串开始位置,忽略多行模式
    •  匹配字符串结束位置,忽略多行模式
    •  匹配位于单词开始或结束位置的空字符串
    • B 匹配不位于单词开始或结束位置的空字符串
    • d 匹配一个数字, 相当于 [0-9]
    • D 匹配非数字,相当于 [^0-9]
    • s 匹配任意空白字符, 相当于 [ fv]
    • S 匹配非空白字符,相当于 [^ fv]
    • w 匹配数字、字母、下划线中任意一个字符, 相当于 [a-zA-Z0-9_]
    • W 匹配非数字、字母、下划线中的任意字符,相当于 [^a-zA-Z0-9_]
原文地址:https://www.cnblogs.com/liyu8/p/14243760.html