Python Beautiful Soup簡介

Beautiful Soup簡介

Beautiful Soup 是一個能夠從HTML或XML文件中提取數據的Python庫.它可以經過你喜歡的轉換器實現慣用的文檔導航,查找,修改文檔的方式.html

BeautifulSoup

BeautifulSoup 對象表示的是一個文檔的所有內容.大部分時候,能夠把它看成 Tag 對象,它支持 遍歷文檔樹 和 搜索文檔樹 中描述的大部分的方法.html5

由於 BeautifulSoup 對象並非真正的HTML或XML的tag,因此它沒有nameattribute屬性.但有時查看它的 .name 屬性是很方便的,因此 BeautifulSoup 對象包含了一個值爲 「[document]」 的特殊屬性 .namepython

文檔解析錯誤

文檔解析錯誤有兩種.一種是崩潰,Beautiful Soup嘗試解析一段文檔結果卻拋除了異常,一般是 HTMLParser.HTMLParseError .還有一種異常狀況,是Beautiful Soup解析後的文檔樹看起來與原來的內容相差不少.網絡

這些錯誤幾乎都不是Beautiful Soup的緣由,這不會是由於Beautiful Soup得代碼寫的太優秀,而是由於Beautiful Soup沒有包含任何文檔解析代碼.異常產生自被依賴的解析器,若是解析器不能很好的解析出當前的文檔,那麼最好的辦法是換一個解析器.app

最多見的解析錯誤是 HTMLParser.HTMLParseError: malformed start tag 和 HTMLParser.HTMLParseError: bad end tag .這都是由Python內置的解析器引發的,解決方法是 安裝lxml或html5libjsp

最多見的異常現象是當前文檔找不到指定的Tag,而這個Tag光是用眼睛就足夠發現的了. find_all() 方法返回 [] ,而 find() 方法返回 None .這是Python內置解析器的又一個問題: 解析器會跳過那些它不知道的tag.解決方法仍是 安裝lxml或html5libspa

示例代碼

# -*- coding:UTF-8 -*-
#!/usr/bin/python
import requests
from bs4 import BeautifulSoup

r = requests.get('http://www.163.com/')
soup = BeautifulSoup(r.text)
print("---------------------------------")
print(soup.title)
print("---------------------------------")
print(soup.title.name)
print("---------------------------------")
print(soup.title.string)
print("---------------------------------")
print(soup.title.parent.name)
print("---------------------------------")
print(soup.p)
print("---------------------------------")
print(soup.p['class'])
print("---------------------------------")
print(soup.a)
print("---------------------------------")
for link in soup.find_all('a'):
  print(link.get('href'))
print("---------------------------------")
print(soup.body.text)
print("---------------------------------")

輸出結果:
---------------------------------
<title>網易</title>
---------------------------------
title
---------------------------------
網易
---------------------------------
head
---------------------------------
<p class="pos-abs">一週圖片精選:2015.3.7-3.13</p>
---------------------------------
['pos-abs']
---------------------------------
<a class="ntes-nav-select-title ntes-nav-entry-bgblack JS_NTES_LOG_FE"
 data-module-name="n_topnavapp" href="http://www.163.com/#f=topnav">應用
<em class="ntes-nav-select-arr"></em></a>
---------------------------------
http://www.163.com/#f=topnav
http://m.163.com/newsapp/#f=topnav
http://music.163.com/#f=topnav
http://yuedu.163.com/#f=topnav
http://note.youdao.com/#f=topnav
http://love.163.com/
http://open.163.com/#f=topnav
http://caipiao.163.com/mobile/client_cp.jsp#from=yingyong
http://cidian.youdao.com/?vendor=topnav
http://mail.163.com/client/dl.html?from=mail46
http://www.lofter.com/?act=qb163rk_20141031_01
···
---------------------------------
應用
網易新聞
網易雲音樂
網易雲閱讀
有道雲筆記
···
---------------------------------

更多介紹可參考官方文檔code

整理自網絡

svoid
2015-03-14