前言
本篇詳細介紹beautifulsoup4的功能,從最基礎的開始講起,讓小伙伴們都能入門
一、讀取HTML頁面
1.先寫一個簡單的html頁面,把以下內容copy出來,保存為html格式文件
<meta charset="UTF-8"> <!-- for HTML5 -->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<html><head><title>yoyo ketang</title></head>
<body>
<b><!--Hey, this in comment!--></b>
<p class="title"><b>yoyoketang</b></p>
<p class="yoyo">這里是我的微信公眾號:yoyoketang
<a href="http://www.cnblogs.com/yoyoketang/tag/fiddler/" class="sister" id="link1">fiddler</a>,
<a href="http://www.cnblogs.com/yoyoketang/tag/python/" class="sister" id="link2">python</a>,
<a href="http://www.cnblogs.com/yoyoketang/tag/selenium/" class="sister" id="link3">selenium</a>;
快來關注吧!</p>
<p class="story">...</p>
2.為了學習方便,可以把此html文件和腳本放同一文件夾下
3.用python的open函數讀取這個html,如下圖能正確打印出來,說明讀取成功了
二、解析器:html.parser
1.用BeautifulSoup的構造方法,就能得到一個文檔的對象, 可以傳入一段字符串或一個文件句柄
2.如果我們調用BeautifulSoup這個類的時候,不帶"html.parser"參數,這時候會有個waring的,下圖紅色框框區域給出了建議。
3.html.parser這個是python庫里面自帶的解析器,無需安裝。
4.prettify()這個方法是把文件解析成html格式,用html的標准格式輸出(有縮進的)
三、對象的種類
1.Beautiful Soup將復雜HTML文檔轉換成一個復雜的樹形結構,每個節點都是Python對象,所有對象可以歸納為4種:
Tag : 標簽對象,如:<p class="title"><b>yoyoketang</b></p>,這就是一個標簽
NavigableString :字符對象,如:這里是我的微信公眾號:yoyoketang
BeautifulSoup :就是整個html對象
Comment :注釋對象,如:!-- for HTML5 --,它其實就是一個特殊NavigableString
2.弄清楚了這四個對象,后面所有的操作但是基於這四個(其實最后面一個comment可以忽略,幾乎用不到)
四、Tag對象
1.html里面識別一個tag,其實一般像這種:
<p class="title"><b>yoyoketang</b></p>
<b>yoyoketang</b>
<head><title>yoyo ketang</title></head>
以上這些都是tag,很明顯都是以<xx 開頭</xx> 結尾這種,就是一個完整的tag
2.通過標簽的名稱,來獲取tag對象
3.如果有多個相同的標簽名稱,返回的是第一個
五、Tag對象:name屬性
1.tag的name屬性,每一個tag都有name屬性,用.name獲取,如上面的三個name屬性分別為p,b,head。也就是<xx開頭的,這里的xx就是它的name屬性
2.html是一個樹狀結構的,每個tag都有屬性,整個html對象也有name屬性,它的屬性是:[document]
六、Tag對象:Attributes
1.tag.attrs可以打印出所有的屬性,可以看出是個字典格式的
2.那么獲取其中的某一個屬性,就跟操作字典一樣,如:tag["href"]
3.由於class屬性一般可以為多個,中間空格隔開,所以class屬性獲取的是一個list類型:[u'sister']
4.tag.string,這里Tag對象變成NavigableString對象了,呵呵小伙伴們要懵逼了吧。其實打印出來就是一個字符串。
七、發福利
1.爬糗事百科首頁的段子
# coding:utf-8
from bs4 import BeautifulSoup
import requests
r = requests.get("https://www.qiushibaike.com/")
qiubai = r.content
soup = BeautifulSoup(qiubai, "html.parser")
duanzi = soup.find_all(class_="content")
for i in duanzi:
# tag的 .contents 屬性可以將tag的子節點以列表的方式輸出
duan = i.span.contents[0] # 取第一個
print duan
對python接口自動化有興趣的,可以加python接口自動化QQ群:226296743
也可以關注下我的個人公眾號:

