1. 程式人生 > >【Python3 爬蟲學習筆記】解析庫的使用 6 —— Beautiful Soup 4

【Python3 爬蟲學習筆記】解析庫的使用 6 —— Beautiful Soup 4

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():**前者返回節點後所有符合條件的節點,後者返回第一個符合條件的節點。