python爬蟲07 | 有了 BeautifulSoup ,媽媽再也不用擔心我的正則表達式了

我們上次做了

 

你的第一個爬蟲,爬取噹噹網 Top 500 本五星好評書籍

 

有些朋友覺得

 

利用正則表達式去提取信息

 

太特麼麻煩了

 

640?wx_fmt.jpeg

 

有沒有什麼別的方式

 

更方便過濾我們想要的內容啊

 

emmmm

 

你還別說

 

還真有

 

有一個高效的網頁解析庫

 

它的名字叫做

 

BeautifulSoup

 

 

那可是

 

640?wx_fmt.jpeg

 

 

是一個可以從 HTML 或 XML 文件中提取數據的 Python 庫

 

那麼這麼玩呢

 

...

 

 

接下來就是

 

學習python的正確姿勢

 

640?wx_fmt.jpeg

 

 

首先我們要安裝一下這個庫

 

pip install beautifulsoup4

 

beautifulsoup支持不同的解析器

 

比如

 

對 HTML 的解析

 

對 XML 的解析

 

對 HTML5 的解析

 

你看

 

640?wx_fmt.png


 

一般情況下

 

我們用的比較多的是 lxml 解析器

 

我們先來使用一個例子

 

讓你體驗一下

 

beautifulsoup 的一些常用的方法

 

可流弊了呢

 

640?wx_fmt.jpeg

 

比如我們有這樣一段 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')

 

 

此時此刻

 

就不需要自己寫正則匹配了

 

640?wx_fmt.jpeg

 

我們要做的就是從這個對象直接獲取我們要的內容

 

獲取標題的內容

 

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/

 

有了它

 

媽媽再也不用擔心我的正則表達式了

 

下次還有人這樣問你

 

年輕人,不會正則表達式你睡得着覺?有點出息沒有?

 

你可以傲嬌的告訴他

 

640?wx_fmt.jpeg

 

 

睡得着

 

 

本篇完

 

再見

 

 

 

近期文章

 

python爬蟲06 | 你的第一個爬蟲,爬取噹噹網 Top 500 本五星好評書籍

 

python爬蟲05 | 年輕人,不會正則表達式你睡得着覺?有點出息沒有?

 

python爬蟲04 | 長江後浪推前浪,Reuqests庫把urllib庫拍在沙灘上

 

 

640?wx_fmt.gif

掃一掃

學習 Python 沒煩惱

 

640

 

 

 

 

 

 

好看的人都點了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章