BeautifulSoup

靈活又方便的網(wǎng)頁解析庫,處理高效,支持多種解析器。利用它不用編寫正則表達(dá)式即可方便地實現(xiàn)網(wǎng)頁信息的提取。

1 安裝:

pip3 install beautifulsoup4

2 使用:

2.1 解析庫:

解析器 優(yōu)勢 劣勢
python標(biāo)準(zhǔn)庫 (html.parse) python內(nèi)置標(biāo)準(zhǔn)庫
執(zhí)行速度適中文檔容錯能力強(qiáng)
與之前版本中文容錯能力差
lxml html解析器 速度快,文檔容錯能力強(qiáng) 需要安裝C語言庫?
lxml XML解析器 速度快,唯一支持XML的解析器 需要安裝C語言
html5lib 最好的容錯性,以瀏覽器的放式解析文檔生成html5格式的文檔 速度慢

2.2:標(biāo)簽選擇器:

from bs4 import BeautifulSoup
soup = BeautifulSoup(html.'xml')

  • soup.prettify()
    格式化代碼,補(bǔ)全,容錯處理
  • soup.title.string()
    選中title打印里面的內(nèi)容
  • print(soup.title)
  • pirnt(type(soup.title))
  • print(soup.head)
  • print(soup.p)
    連同標(biāo)簽一起打印,只打印第一個結(jié)果

獲取名稱:

  • print(soup.title.name)
    title

獲取屬性:

  • print(soup.p.attrs['name'])
  • print(soup.p['name']

獲取內(nèi)容:

  • print(soup.p.string)

嵌套選擇:

  • print(soup.head.title.string)

子節(jié)點和子孫節(jié)點:

  • print(soup.p.contents)
    獲取子節(jié)點返回類型為列表
獲取子節(jié)點
for i, child in enumerate(soup.p.children):
  print(i, child)
#返回類型為迭代器
獲取子孫節(jié)點
for i, child enumerate(soup.p.descendants):
  print(i,child)
#返回類型為迭代器

父節(jié)點和祖先節(jié)點:

  • print(soup.a.parent)
    獲取父節(jié)點
  • print(list(enumerate(soup.a.parents)))
    枚舉,并轉(zhuǎn)化成列表
    獲取所有祖先節(jié)點

獲取兄弟節(jié)點:

  • print(list(enumerate(soup.a.next_siblings)))
    獲取后面的兄弟節(jié)點
  • print(list(enumerate(soup.a.previous_siblings)))
    獲取之前的兄弟節(jié)點

2.3 標(biāo)準(zhǔn)選擇器:
find_all(name,attrs,recursive,text,**kwargs)

  • print(soup.find_all('ul'))
  • print(soup.find_all(attrs={'name',elements'}))

特殊類型:

  • print(soup.find_all(id='list-1'))
  • print(soup.find_all(class_='element'))

text:

  • print(soup.find_all(text='Foo'))

find(name,attrs,recursive,text,**kwargs)

find返回單個元素,find_all返回所有元素

find_parents()
find_parent()

find_parents()返回所有祖先節(jié)點,find_parent()返回直接父節(jié)點

find_next_siblings()
find_next_sibling()

find_next_siblings()返回后面所有兄弟節(jié)點
find_next_sibling()返回后面第一個兄弟節(jié)點

find_previous_sblings()
find_previous_sibling()

find_previous_sblings()返回前面所有兄弟節(jié)點
find_previous_sibling()返回前面第一個兄弟節(jié)點

find_all_next()
find_next()

find_all_next()返回節(jié)點后所有符合條件的節(jié)點,
find_next()返回節(jié)點后第一個符合條件的節(jié)點

find_all_previous()
find_previous()

find_all_previous()返回節(jié)點前所有符合條件的節(jié)點,
find_previsous(()返回第一個符合條件的節(jié)點

2.4 CSS選擇器:
通過select()直接傳入CSS選擇器即可

print(soup.select('.pane .pane-heading'))  # .代表class屬性
print(soup.select('ul i'))
print(soup.select('#list-2 .element'))  # #代表id

#獲取屬性
for ul in soup.select('ul'):
  print(ul['id'])  #獲取屬性
  print(ul.attrs['id']  #獲取屬性

#獲取內(nèi)容
for ul in soup.select('li')
  print(ul.get_text())
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容