zoukankan      html  css  js  c++  java
  • BeautifulSoup重点复习

     1 html = """
     2 <html><head><title>The Dormouse's story</title></head>
     3 <body>
     4 <p class="title" name="dromouse"><b>The Dormouse's story</b></p>
     5 <p class="story">Once upon a time there were three little sisters; and their names were
     6 <a href="http://example.com/elsie" class="sister" id="link1"><!-- Elsie --></a>,
     7 <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
     8 <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
     9 and they lived at the bottom of a well.</p>
    10 <p class="story">...</p>
    11 """
    12 from bs4 import BeautifulSoup
    13 
    14 #一、标签选择器
    15 soup = BeautifulSoup(html,'lxml')
    16 print(soup.prettify())#自动进行格式化处理,补全标签等
    17 print(soup.title.string)#得到title标签里的内容,获取x里面的内容用soup.x.string
    18 print(soup.title)#获取title标签
    19 print(soup.title.name)#获得标签的名称,注意是标签
    20 print(soup.head)#获取head标签
    21 print(soup.p)#匹配第一个p标签
    22 print(soup.p['name'])#获取p标签的属性即后面的name部分<p class="title" name="dromouse">
    23 print(soup.head.title.string)#可以进行嵌套层层剥离标签
    24 print(soup.p.contents)#获取p标签的所有子节点,以列表形式返回
    25 print(soup.p.children)#返回迭代器,可以以循环方式遍历p标签的子节点
    26 for i,child in enumerate(soup.p.children):
    27     print(i,child)
    28 print(soup.p.descendants)#返回迭代器,获取所有的子孙节点
    29 print(soup.a.parent)#获取a标签的父节点信息
    30 print(soup.a.parents)#获取祖先节点
    31 print(soup.a.next_siblings)#返回迭代器,下一个兄弟节点
    32 print(soup.a.previous_siblings)#返回迭代器,前一个兄弟节点
    33 
    34 #二、标准选择器
    35 
    36 html='''
    37 <div class="panel">
    38     <div class="panel-heading">
    39         <h4>Hello</h4>
    40     </div>
    41     <div class="panel-body">
    42         <ul class="list" id="list-1" name="elements">
    43             <li class="element">Foo</li>
    44             <li class="element">Bar</li>
    45             <li class="element">Jay</li>
    46         </ul>
    47         <ul class="list list-small" id="list-2">
    48             <li class="element">Foo</li>
    49             <li class="element">Bar</li>
    50         </ul>
    51     </div>
    52 </div>
    53 '''
    54 #find_all
    55 from bs4 import BeautifulSoup
    56 soup = BeautifulSoup(html,'lxml')
    57 
    58 print(soup.find_all('ul'))#查找ul标签所有内容
    59 
    60 print(soup.find_all(attrs={'id':'list-1'}))#可以将attrs传入字典以完成查找
    61 print(soup.find_all(id='list-1'))#可以简写,不用传入attrs
    62 print(soup.find_all(class_='element'))#可以简写
    63 print(soup.find_all(text='Foo'))#可以匹配到foo
    64 
    65 '''
    66 #find与find_all用法一致,只是返回第一个元素
    67 find_parents() find_parent()
    68 find_parents()返回所有祖先节点,find_parent()返回直接父节点。
    69 find_next_siblings() find_next_sibling()
    70 find_next_siblings()返回后面所有兄弟节点,find_next_sibling()返回后面第一个兄弟节点。
    71 find_previous_siblings() find_previous_sibling()
    72 find_previous_siblings()返回前面所有兄弟节点,find_previous_sibling()返回前面第一个兄弟节点。
    73 find_all_next() find_next()
    74 find_all_next()返回节点后所有符合条件的节点, find_next()返回第一个符合条件的节点
    75 find_all_previous() 和 find_previous()
    76 find_all_previous()返回节点后所有符合条件的节点, find_previous()返回第一个符合条件的节点
    77 
    78 '''
    79 print('*'*200)
    80 #css选择器
    81 print(soup.select('.panel .panel-heading'))#用.代替class
    82 print(soup.select('ul li'))#找到ul li的所有标签
    83 print(soup.select('#list-2 .element'))#用#代替id
    84 for ul in soup.select('ul'):#获取ul标签
    85     print(ul['id'])#获取ul标签的id属性
    86 for ul in soup.select('ul'):
    87     print(ul.get_text())#获取ul的文本内容
    88 
    89 
    90 
    91 #总结:
    92 # 推荐使用lxml解析库,必要时使用html.parser
    93 #标签选择器筛选功能弱但是速度极快
    94 #建议使用find(),findall()查询匹配单个结果或者多个结果
    95 #如果对css选择器熟悉建议使用select()
    96 #记住常用的获取属性和文本的方法
  • 相关阅读:
    windows C++ 获得一个进程的线程数目
    乌龟 SVN 在update后,如何知道 update前的版本号?
    C++ 类中的static对象貌似不能是类对象
    WinForms C#:html编辑器工程源码,含直接写WebBrowser的文件流、IPersistStreamInit接口的声明和一些相关的小方法
    用Remoting 实现一个文件传输组件
    [转载]Extreme Game Programming
    C#:10进制转2进制函数
    bindows 源码格式化工具(测试中的测试)C#源码
    明天又是周末,可以好好休息了!
    将文件加入到图形文件里;
  • 原文地址:https://www.cnblogs.com/themost/p/6855146.html
Copyright © 2011-2022 走看看