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 #记住常用的获取属性和文本的方法

 

posted @ 2017-05-15 10:06  道高一尺  阅读(301)  评论(0编辑  收藏  举报