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 #1、標籤選擇器
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 #2、標準選擇器
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 #記住經常使用的獲取屬性和文本的方法
相關文章
相關標籤/搜索