zoukankan      html  css  js  c++  java
  • 用Beautiful Soup解析html源码

    #xiaodeng
    #python3
    #用Beautiful Soup解析html源码
    
    
    
    html_doc = """
    <html>
        <head>
            <title>The Dormouse's story</title>
        </head>
        <body>
            <b>测试</b>
            <p class="title">
                <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>;
            <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
            <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
            <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
            <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>
    """
    from bs4 import BeautifulSoup
    soup = BeautifulSoup(html_doc,"html.parser")
    
    
    #1、补全html代码格式化输出
    #print(soup.prettify())
    
    
    #2、获取html页面标题
    #print(soup.title.string)
    """
    还有其他类似用法:
    1)print(soup.title.title)       #result:title
    2)print(soup.title.name)        #result:title
    """
    
    
    #3、查找所有的p标签和p标签的内容,返回一个list
    #print(soup.find_all("p"))
    #print(soup.find_all("a"))
    #print(soup.find_all("title"))
    """
    查找一条p标签记录,print(soup.p)
    """
    
    #4、查p标签下属性class的value值
    #print(soup.p["class"])
    
    
    #5、查找所有id="XXX"的标签及标签内容
    #print(soup.find_all(id="link3"))
    
    
    #6、从文档中找到所有<a>标签的链接
    """
    for key in soup.find_all("a"):
        print(key.get("href"))
    """
    
    
    #7、从文档中获取所有的文字内容
    #print(soup.get_text())
    
    
    
    #8、探索标签数据类型
    soup = BeautifulSoup('<b class="boldest">Extremely bold</b>',"html.parser")
    tag = soup.b
    #print(type(tag))    #<class 'bs4.element.Tag'>
    
    
    #9、获取标签名字,每个tag都有自己的名字,通过.name来获取
    #print(soup.b.name)
    
    
    #10、操作标签属性
    #一个tag可能有很多个属性.
    # tag <b class="boldest"> 有一个 “class” 的属性,值为 “boldest” . tag的属性的操作方法与字典相同
    #print(soup.b["class"])
    
    
    #11、执行删除标签属性等操作
    #del tag['class']
    
    
    #12、正则表达式
    #面例子中找出所有以b开头的标签,这表示<body>和<b>标签都应该被找到
    """
    import re
    soup = BeautifulSoup(html_doc,"html.parser")
    for tag in soup.find_all(re.compile("^b")):
        print(tag.name)
    """
    import re
    soup = BeautifulSoup(html_doc,"html.parser")
    #print(soup.find_all(href=re.compile("tillie")))  #href中包含tillie的超链接
    
    
    #13、列表形式的匹配(匹配a和p标签)
    soup = BeautifulSoup(html_doc,"html.parser")
    #print(soup.find_all(["a","p"]))
    
    
    #14、查找a标签下id="XXX"的标签及标签内容
    # find_all( name , attrs , recursive , text , **kwargs )
    # find_all() 方法搜索当前tag的所有tag子节点,并判断是否符合过滤器的条件.这里有几个例子:
    #print(soup.find_all("a",id="link3"))
    
    
    #15、查找a标签下class_="sister"的内容
    #print(soup.find_all("a",class_="sister"))
    
    
    #16、通过text参数可以搜文档中的字符串内容.
    #与name参数的可选值一样, text参数接受字符串,正则表达式,列表,True
    #print(soup.find_all(text="Elsie"))
    #print(soup.find_all(text=["Tillie", "Elsie", "Lacie"]))
    
    
    #17、限定查找标签的数量
    #print(soup.find_all("a",limit=2))
    
    
    #18、想搜索tag的直接子节点,可以使用参数 recursive=False
    doc="""<html>
     <head>
      <title>The Dormouse's story</title>
     </head>
    </html>
    """
    soup = BeautifulSoup(doc,"html.parser")
    #print(soup.find_all("title",recursive=False))
    
    
    #19、查找父节点,兄弟节点等办法(待研究)
    
    
    #20、查找title标签
    soup = BeautifulSoup(html_doc,"html.parser")
    #print(soup.select("title"))
    
    
    #21、找到某个tag标签下的直接子标签
    #注意事项:p和b之前要空格,此写法"p>b"错误
    #print(soup.select("p > b"))#查找p标签下的直接子标签b
    #print(soup.select("body > b"))
    
    
    #22、通过CSS的类名查找class="sister"的标签
    result=soup.select(".sister")
    #print(result)
    
    
    #23、通过tag的id查找,soup.select("#link1")
    result=soup.select("#link1")
    #print(result)#[<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>]
  • 相关阅读:
    切换路由时中止未返回数据的请求
    elementui 走马灯图片自适应
    覆盖elementui样式
    vue+elementui搭建后台管理界面(5递归生成侧栏路由)
    vue+elementui搭建后台管理界面(4使用font-awesome)
    vue+elementui搭建后台管理界面(3侧边栏菜单)
    vue+elementui搭建后台管理界面(2首页)
    vue+elementui搭建后台管理界面(1登录)
    C排序算法
    各种语言中获取时间戳的方法
  • 原文地址:https://www.cnblogs.com/dengyg200891/p/5350227.html
Copyright © 2011-2022 走看看