[python3 - package] BeautifulSoup

1. 安裝 pip install BeautifulSouphtml

2. 官方文檔 - https://www.crummy.com/software/BeautifulSoup/bs4/doc/python

3. 經常使用的Object類型spa

from bs4 import BeautifulSoup

bsObj = BeautifulSoup('<p style="float:left">Chapter 1</p>', 'html.parser') #BeautifulSoup Object
tagObj = bsObj.p #Tag Object
navStrObj = tagObj.string #NavigableString Object

4. 經常使用APIcode

  • bsObj.findAll(tag, attrs, recursive, string, limit, **kwargs)
    • 最少要有一個參數,能夠是tag/attrs/string/keyword(指的是tag中的attribute,如: href, id)
    • 除了tag能夠直接寫tag名字之外,其餘都須要表達式
    • Return - Tag Object list(若是隻有string參數,則返回NavigableString list)
    • Difference with bsObj.find() 
      • 意思上等價於bsObj.findAll(limit=1)
      • 但返回值類型不一樣,find()返回string,若是爲空則返回None
      • 返回的是html文件中找到的第一個元素,不必定是頁面上看到的第一個
  • bsObj.tag
    • Return - 第一個出現的這個tag
  • bsObj.tag.get_text()
    • Return - tag中所包含的內容(String類型)
    • 若是tag中還包含有其餘tag,返回的string中一樣包含子tag中的內容
  • bsObj.tag.children/bsObj.tag.descendants
    • Return - tag list
    • tag object的屬性,能夠用在find()後
    • children是最近的sub tag/descendants包括是全部sub tag
  • bsObj.tag.next_sibling(s)/bsObj.tag.previous_sibling(s)/bsObj.tag.parent(s)
    • 複數 - Return tag list
    • 單數 - Return 最近的一個tag

5. Samplehtm

 HTMLblog

<html>
    <body>
        <span class="red yellow">Story1</span>
        <span class="green">Story2</span>
        <span class="red">Story3</span>
        <span class="green" id="four">Story4</span>
    </body>
</html>

 Pythonip

data = bsObj.findAll('span') 
# [<span class="red yellow">Story1</span>, <span class="green">Story2</span>, <span class="red">Story3</span>, <span class="green" id="four">Story4</span>]

#同時知足兩個屬性
data = bsObj.findAll(attrs = {'id':'four', 'class': 'green'})
# [<span class="green" id="four">Story4</span>]

#同時知足一個屬性的多個值,順序也必須相同
data = bsObj.findAll(attrs = {'class': 'red yellow'})
# [<span class="red yellow">Story1</span>]
data = bsObj.findAll(attrs = {'class': 'yellow red'})
# []

#只輸入string參數,返回NavigableString list
data = bsObj.findAll(string='Story1')
# ['Story1']
data = bsObj.findAll(string=['Story1','Story2'])
# ['Story1', 'Story2']

#keyword是class時,須要加下劃線,避免和python關鍵詞class衝突
data = bsObj.findAll(class_='green')
# [<span class="green">Story2</span>, <span class="green" id="four">Story4</span>]

#是否包含某個屬性
data = bsObj.findAll(id=True)
# [<span class="green" id="four">Story4</span>]

#tag中所包含的內容
data = bsObj.findAll(id=True)[0].get_text()
# Story4 (這裏是string類型,而不是NavigableString)
相關文章
相關標籤/搜索