本文實(shí)例講述了Python3爬蟲學(xué)習(xí)之爬蟲利器Beautiful Soup用法。分享給大家供大家參考,具體如下:
爬蟲利器Beautiful Soup
前面一篇說到通過urllib.request模塊可以將網(wǎng)頁當(dāng)作本地文件來讀取,那么獲得網(wǎng)頁的html代碼后,自然就是要將我們所需要的部分從雜亂的html代碼中分離出來。既然要做數(shù)據(jù)的查找和提取,當(dāng)然我們首先想到的應(yīng)該是正則表達(dá)式的方式,而正則表達(dá)式書寫的復(fù)雜我想大家都有體會,而且Python中的正則表達(dá)式和其他語言中的并沒有太大區(qū)別,也就不贅述了,所以現(xiàn)在介紹Python中一種比較友好且易用的數(shù)據(jù)提取方式——Beautiful Soup
照例,先上官方文檔
還有貼心的中文版
Beautiful Soup是一個(gè)可以從HTML或XML文件中提取數(shù)據(jù)的Python庫.它能夠通過你喜歡的轉(zhuǎn)換器實(shí)現(xiàn)慣用的文檔導(dǎo)航,查找,修改文檔的方式.
文檔中的例子其實(shí)說的已經(jīng)比較清楚了,那下面就以爬取簡書首頁文章的標(biāo)題一段代碼來演示一下:
先來看簡書首頁的源代碼:
可以發(fā)現(xiàn)簡書首頁文章的標(biāo)題都是在<a/>標(biāo)簽中,并且class='title',所以,通過
find_all('a', 'title') 便可獲得所有的文章標(biāo)題,具體實(shí)現(xiàn)代碼及結(jié)果如下:
# -*- coding:utf-8 -*-from urllib import requestfrom bs4 import BeautifulSoupurl = r'http://www.jianshu.com'# 模擬真實(shí)瀏覽器進(jìn)行訪問headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}page = request.Request(url, headers=headers)page_info = request.urlopen(page).read()page_info = page_info.decode('utf-8')# 將獲取到的內(nèi)容轉(zhuǎn)換成BeautifulSoup格式,并將html.parser作為解析器soup = BeautifulSoup(page_info, 'html.parser') # 以格式化的形式打印html# print(soup.prettify())titles = soup.find_all('a', 'title') # 查找所有a標(biāo)簽中class='title'的語句# 打印查找到的每一個(gè)a標(biāo)簽的stringfor title in titles: print(title.string)
PS:關(guān)于解析器
Beautiful Soup支持Python標(biāo)準(zhǔn)庫中的HTML解析器,還支持一些第三方的解析器,下表列出了主要的解析器,以及它們的優(yōu)缺點(diǎn):
| 解析器 | 使用方法 | 優(yōu)勢 | 劣勢 |
|---|---|---|---|
| Python標(biāo)準(zhǔn)庫 | BeautifulSoup(markup, "html.parser") | (1)Python的內(nèi)置標(biāo)準(zhǔn)庫 (2)執(zhí)行速度適中 (3)文檔容錯(cuò)能力強(qiáng) | Python 2.7.3 or 3.2.2)前 的版本中文檔容錯(cuò)能力差 |
| lxml HTML 解析器 | BeautifulSoup(markup, "lxml") | (1)速度快 (2)文檔容錯(cuò)能力強(qiáng) | 需要安裝C語言庫 |
| lxml XML 解析器 | BeautifulSoup(markup, ["lxml", "xml"]) OR BeautifulSoup(markup, "xml") | (1)速度快 (2)唯一支持XML的解析器 | 需要安裝C語言庫 |
| html5lib | BeautifulSoup(markup, "html5lib") | (1)最好的容錯(cuò)性 (2)以瀏覽器的方式解析文檔 (3)生成HTML5格式的文檔 | (1)速度慢 (2)不依賴外部擴(kuò)展 |
希望本文所述對大家Python程序設(shè)計(jì)有所幫助。
新聞熱點(diǎn)
疑難解答
圖片精選