【Python3 爬蟲學習筆記】解析庫的使用 6 —— Beautiful Soup 4
阿新 • • 發佈:2018-12-15
text
text引數可用來匹配節點的文字,傳入的形式可以是字串,可以是正則表示式,可以是正則表示式物件,示例如下:
import re
html = '''
<div class="panel">
<div class="panel-body">
<a>Hello,this is a link</a>
<a>Hello,this is a link,too</a>
</div>
</div>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')
print(soup.find_all(text=re.compile('link')))
執行結果如下:
['Hello,this is a link', 'Hello,this is a link,too']
find()
除了find_all()方法,還有find()方法,只不過後者返回的是單個元素,也就是第一個匹配的元素,而前者返回的是所有匹配的元素組成的列表。示例如下:
html = '''
<div class="panel">
<div class="panel-heading">
<h4>Hello</h4>
</div>
<div class="panel-body">
<ul class="list" id="list-1">
<li class="element">Foo</li>
<li class="element">Bar</li>
<li class="element">Jay</li>
</ul>
<ul class="list list-small" id="list-2">
<li class="element">Foo</li>
<li class="element">Bar</li>
</ul>
</div>
</div>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')
print(soup.find(name='ul'))
print(type(soup.find(name='ul')))
print(soup.find(class_='list'))
執行結果如下:
<ul class="list" id="list-1">
<li class="element">Foo</li>
<li class="element">Bar</li>
<li class="element" >Jay</li>
</ul>
<class 'bs4.element.Tag'>
<ul class="list" id="list-1">
<li class="element">Foo</li>
<li class="element">Bar</li>
<li class="element">Jay</li>
</ul>
這裡的返回結果不再是列表,而是第一個匹配的節點元素,型別依然是Tag型別。 另外,還有許多查詢方法,其用法與前面介紹的find_all()、find()方法完全相同,只不過查詢範圍不同,這裡簡單說明下:
- **find_parents()和find_parent():**前者返回所有祖先節點,後者返回直接父節點。
- **find_next_siblings()和find_next_sibling():**前者返回後面所有的兄弟節點,後者返回後面第一個兄弟節點。
- **find_previous_siblings()和find_previous_sibling()?*前者返回前面所有的兄弟節點,後者返回前面第一個兄弟節點。
- **find_all_next()和find_next():**前者返回節點後所有符合條件的節點,後者返回第一個符合條件的節點。
- **find_all_previous()和find_previous():**前者返回節點後所有符合條件的節點,後者返回第一個符合條件的節點。