我們上次做了
有些朋友覺得
利用正則表達式去提取信息
太特麼麻煩了
有沒有什麼別的方式
更方便過濾我們想要的內容啊
emmmm
你還別說
還真有
有一個高效的網頁解析庫
它的名字叫做
BeautifulSoup
那可是
它
是一個可以從 HTML 或 XML 文件中提取數據的 Python 庫
那麼這麼玩呢
...
接下來就是
學習python的正確姿勢
首先我們要安裝一下這個庫
pip install beautifulsoup4
beautifulsoup支持不同的解析器
比如
對 HTML 的解析
對 XML 的解析
對 HTML5 的解析
你看
一般情況下
我們用的比較多的是 lxml 解析器
我們先來使用一個例子
讓你體驗一下
beautifulsoup 的一些常用的方法
可流弊了呢
比如我們有這樣一段 HTML 代碼
html_doc = """
<html><head><title>學習python的正確姿勢</title></head>
<body>
<p class="title"><b>小帥b的故事</b></p>
<p class="story">有一天,小帥b想給大家講兩個笑話
<a href="http://example.com/1" class="sister" id="link1">一個笑話長</a>,
<a href="http://example.com/2" class="sister" id="link2">一個笑話短</a> ,
他問大家,想聽長的還是短的?</p>
<p class="story">...</p>
"""
在不使用 re 來進行正則表達式的情況下
如何快速獲取到我們想要的內容呢?
先安裝一下
pip install beautifulsoup4
pip install lxml
接着將 html 的源代碼傳給 BeautifulSoup
soup = BeautifulSoup(html_doc,'lxml')
此時此刻
就不需要自己寫正則匹配了
我們要做的就是從這個對象直接獲取我們要的內容
獲取標題的內容
print(soup.title.string)
#學習python的正確姿勢
獲取 p 標籤裏面的內容
print(soup.p.string)
#小帥b的故事
獲取 title 的父級標籤
print(soup.title.parent.name)
#head
獲取超鏈接
print(soup.a)
#<a class="sister" href="http://example.com/1" id="link1">一個笑話長</a>
獲取所有超鏈接
print(soup.find_all('a'))
#[<a class="sister" href="http://example.com/1" id="link1">一個笑話長</a>, <a class="sister" href="http://example.com/2" id="link2">一個笑話短</a>]
獲取 id 爲 link2 的超鏈接
print(soup.find(id="link2"))
#<a class="sister" href="http://example.com/2" id="link2">一個笑話短</a>
獲取網頁中所有的內容
print(soup.get_text())
# 學習python的正確姿勢
小帥b的故事
有一天,小帥b想給大家講兩個笑話
一個笑話長,
一個笑話短 ,
他問大家,想聽長的還是短的?
...
除了find方法之外
如果你對css比較熟悉
也可以使用 select 方法
soup = BeautifulSoup(html_doc,'lxml')
print(soup.select("title"))
print(soup.select("body a"))
print(soup.select("p > #link1"))
以上就是 BeautifulSoup 常用的方法
想進一步瞭解可以到這
https://www.crummy.com/software/BeautifulSoup/bs4/doc/
有了它
媽媽再也不用擔心我的正則表達式了
下次還有人這樣問你
你可以傲嬌的告訴他
睡得着
本篇完
再見
近期文章
python爬蟲06 | 你的第一個爬蟲,爬取噹噹網 Top 500 本五星好評書籍
python爬蟲05 | 年輕人,不會正則表達式你睡得着覺?有點出息沒有?
python爬蟲04 | 長江後浪推前浪,Reuqests庫把urllib庫拍在沙灘上
掃一掃
學習 Python 沒煩惱
好看的人都點了