美文网首页
Python中BeautifulSoup4的基本使用

Python中BeautifulSoup4的基本使用

作者: 奶茶分你一半 | 来源:发表于2018-11-22 09:07 被阅读0次

    CSS 选择器:BeautifulSoup4

    from: Mp
    ps: 下文的使用方法只列出了常用的,详细请看官方文档

    概念

    Beautiful Soup基于HTMLDOM,会载入整个文档,解析整个DOM树

    官方文档:

    http://beautifulsoup.readthedocs.io/zh_CN/v4.4.0

    使用

    创建bs对象

    # 打开本地HTML文件的方式来创建对象
    soup = BeautifulSoup(open('xxxx.html'))
    # 创建Beautiful Soup对象
    soup = BeautifulSoup(html, "lxml")  # 指定lxml解析器
    

    格式化输出soup对象内容

    print(soup.prettify())
    

    Tag 类

    # 获取Tag  soup.标签名  查找的是在所有内容中的第一个符合要求的标签
    print(soup.标签名)
    
    # name是获取当前标签名称,soup.name为[document]
    print(soup.标签名.name)
    
    # attrs获取当前标签的所有属性和值,以键值对形式存入字典返回  下文以 a 标签为例
    print(soup.a.attrs)
    # 获取标签某一属性的值
    print(soup.a['href'])
    # 修改标签某一个属性的值
    soup.a['href'] = "http://www.peipeipei.com"
    # 删除某一属性
    del soup.a['class']
    

    NavigableString 类 以p标签为例

    # 获取标签内内容
    print(soup.p.string)
    print(type(soup.p.string))
    

    Comment类 以a标签为例,a标签内内容为注释

    <a href="http://example.com/elsie" class="sister" id="link1"><!-- Elsie --></a>,
    
    print(soup.a.string)  # 注释符号不输出,只输出内容
    # Elsie
    print(type(soup.a.string))
    # <class 'bs4.element.Comment'>
    

    遍历文档树 以head标签为例

    "<head><title>The Dormouse's story</title></head>"
    
    #  .content 属性可以将tag的子节点以列表的方式输出
    print(soup.head.contents)
    # [<title>The Dormouse's story</title>]
    print(soup.head.contents[1])  # 获取列表中某一元素
    
    # .children 返回的是一个list生成器对象
    print(soup.head.children)
    # <listiterator object at 0x7f71457f5710>
    for child in soup.body.children:
        print(child)
    
    # .descendants 对所有tag的子孙节点进行递归循环
    for child in soup.descendants:
        print(child)
    
    
    # .string 返回最里面的内容
    print(soup.head.string)
    print(soup.title.string)  # 两个输出是一样的
    

    搜索文档树

    find_all(name, attrs, recursive, text, **kwargs)
    # find用法相同,只返回一个
    
    # name参数可以查找所有名字为 name 的tag,可以是字符串,正则表达式,列表
    print(soup.find_all('a'))
    for tag in soup.find_all(re.compile("^b")):
        print(tag.name)
    print(soup.find_all(["a", "b"]))
    
    # keyword参数直接匹配属性对应的值
    print(soup.find_all(class_="sister"))  # 因为class在python中已经有了,为了防止冲突,所以是class_
    print(soup.find_all(id='link2'))
    
    # text参数搜索文档中的字符串内容,与name参数的可选值一样,text参数接受字符串,正则表达式,列表
    print(soup.find_all(text="Elsie"))
    print(soup.find_all(text=["Tillie", "Elsie", "Lacie"]))
    print(soup.find_all(text=re.compile("Dormouse")))
    

    相关文章

      网友评论

          本文标题:Python中BeautifulSoup4的基本使用

          本文链接:https://www.haomeiwen.com/subject/cmykqqtx.html