Python3爬蟲學(xué)習(xí)之爬蟲利器Beautiful Soup用法分析
本文實(shí)例講述了Python3爬蟲學(xué)習(xí)之爬蟲利器Beautiful Soup用法。分享給大家供大家參考,具體如下:
爬蟲利器Beautiful Soup
前面一篇說(shuō)到通過urllib.request
模塊可以將網(wǎng)頁(yè)當(dāng)作本地文件來(lái)讀取,那么獲得網(wǎng)頁(yè)的html代碼后,自然就是要將我們所需要的部分從雜亂的html代碼中分離出來(lái)。既然要做數(shù)據(jù)的查找和提取,當(dāng)然我們首先想到的應(yīng)該是正則表達(dá)式的方式,而正則表達(dá)式書寫的復(fù)雜我想大家都有體會(huì),而且Python中的正則表達(dá)式和其他語(yǔ)言中的并沒有太大區(qū)別,也就不贅述了,所以現(xiàn)在介紹Python中一種比較友好且易用的數(shù)據(jù)提取方式——Beautiful Soup
Beautiful Soup是一個(gè)可以從HTML或XML文件中提取數(shù)據(jù)的Python庫(kù).它能夠通過你喜歡的轉(zhuǎn)換器實(shí)現(xiàn)慣用的文檔導(dǎo)航,查找,修改文檔的方式.
文檔中的例子其實(shí)說(shuō)的已經(jīng)比較清楚了,那下面就以爬取簡(jiǎn)書首頁(yè)文章的標(biāo)題一段代碼來(lái)演示一下:
先來(lái)看簡(jiǎn)書首頁(yè)的源代碼:
可以發(fā)現(xiàn)簡(jiǎn)書首頁(yè)文章的標(biāo)題都是在<a/>標(biāo)簽中,并且class='title'
,所以,通過
find_all('a', 'title')
便可獲得所有的文章標(biāo)題,具體實(shí)現(xiàn)代碼及結(jié)果如下:
# -*- coding:utf-8 -*- from urllib import request from bs4 import BeautifulSoup url = 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'的語(yǔ)句 # 打印查找到的每一個(gè)a標(biāo)簽的string for title in titles: print(title.string)
PS:關(guān)于解析器
Beautiful Soup支持Python標(biāo)準(zhǔn)庫(kù)中的HTML解析器,還支持一些第三方的解析器,下表列出了主要的解析器,以及它們的優(yōu)缺點(diǎn):
解析器 | 使用方法 | 優(yōu)勢(shì) | 劣勢(shì) |
---|---|---|---|
Python標(biāo)準(zhǔn)庫(kù) | BeautifulSoup(markup, "html.parser") | (1)Python的內(nèi)置標(biāo)準(zhǔn)庫(kù) (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語(yǔ)言庫(kù) |
lxml XML 解析器 | BeautifulSoup(markup, ["lxml", "xml"]) OR BeautifulSoup(markup, "xml") | (1)速度快 (2)唯一支持XML的解析器 |
需要安裝C語(yǔ)言庫(kù) |
html5lib | BeautifulSoup(markup, "html5lib") | (1)最好的容錯(cuò)性 (2)以瀏覽器的方式解析文檔 (3)生成HTML5格式的文檔 |
(1)速度慢 (2)不依賴外部擴(kuò)展 |
更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python Socket編程技巧總結(jié)》、《Python正則表達(dá)式用法總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
- 使用Python爬蟲庫(kù)BeautifulSoup遍歷文檔樹并對(duì)標(biāo)簽進(jìn)行操作詳解
- Python爬蟲庫(kù)BeautifulSoup獲取對(duì)象(標(biāo)簽)名,屬性,內(nèi)容,注釋
- Python爬蟲庫(kù)BeautifulSoup的介紹與簡(jiǎn)單使用實(shí)例
- Python下利用BeautifulSoup解析HTML的實(shí)現(xiàn)
- python使用beautifulsoup4爬取酷狗音樂代碼實(shí)例
- python3 BeautifulSoup模塊使用字典的方法抓取a標(biāo)簽內(nèi)的數(shù)據(jù)示例
- Python如何使用BeautifulSoup爬取網(wǎng)頁(yè)信息
- Python爬蟲實(shí)現(xiàn)使用beautifulSoup4爬取名言網(wǎng)功能案例
- Python使用Beautiful Soup爬取豆瓣音樂排行榜過程解析
- Python BeautifulSoup [解決方法] TypeError: list indices must be integers or slices, not str
- Python基于BeautifulSoup和requests實(shí)現(xiàn)的爬蟲功能示例
- python中bs4.BeautifulSoup的基本用法
- Python獲取基金網(wǎng)站網(wǎng)頁(yè)內(nèi)容、使用BeautifulSoup庫(kù)分析html操作示例
- python使用BeautifulSoup與正則表達(dá)式爬取時(shí)光網(wǎng)不同地區(qū)top100電影并對(duì)比
- Python HTML解析器BeautifulSoup用法實(shí)例詳解【爬蟲解析器】
- Python爬蟲beautifulsoup4常用的解析方法總結(jié)
- python3實(shí)現(xiàn)網(wǎng)絡(luò)爬蟲之BeautifulSoup使用詳解
- python爬蟲開發(fā)之Beautiful Soup模塊從安裝到詳細(xì)使用方法與實(shí)例
相關(guān)文章
python實(shí)現(xiàn)zabbix發(fā)送短信腳本
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)zabbix發(fā)送短信腳本,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09python sys.stdin和sys.stdout的用法說(shuō)明
這篇文章主要介紹了python sys.stdin和sys.stdout的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2021-03-03詳談python中冒號(hào)與逗號(hào)的區(qū)別
下面小編就為大家分享一篇詳談python中冒號(hào)與逗號(hào)的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2018-04-04python爬蟲框架scrapy實(shí)戰(zhàn)之爬取京東商城進(jìn)階篇
這篇文章主要給大家介紹了利用python爬蟲框架scrapy爬取京東商城的相關(guān)資料,文中給出了詳細(xì)的代碼介紹供大家參考學(xué)習(xí),并在文末給出了完整的代碼,需要的朋友們可以參考學(xué)習(xí),下面來(lái)一起看看吧。2017-04-04使用Python的package機(jī)制如何簡(jiǎn)化utils包設(shè)計(jì)詳解
這篇文章主要給大家介紹了關(guān)于使用Python的package機(jī)制如何簡(jiǎn)化utils包設(shè)計(jì)的相關(guān)資料,文中通過示例代碼的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-12-12scrapy+scrapyd+gerapy?爬蟲調(diào)度框架超詳細(xì)教程
Scrapy吸引人的地方在于它是一個(gè)框架,任何人都可以根據(jù)需求方便的修改。它也提供了多種類型爬蟲的基類,如BaseSpider、sitemap爬蟲等,最新版本又提供了web2.0爬蟲的支持,這篇文章主要介紹了scrapy+scrapyd+gerapy?爬蟲調(diào)度框架超詳細(xì)教程,需要的朋友可以參考下2022-06-06Python機(jī)器學(xué)習(xí)之SVM支持向量機(jī)
這篇文章主要為大家詳細(xì)介紹了Python機(jī)器學(xué)習(xí)之SVM支持向量機(jī),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12Python基于遞歸實(shí)現(xiàn)電話號(hào)碼映射功能示例
這篇文章主要介紹了Python基于遞歸實(shí)現(xiàn)電話號(hào)碼映射功能,結(jié)合實(shí)例形式分析了Python針對(duì)字典的遞歸、遍歷相關(guān)操作技巧,需要的朋友可以參考下2018-04-04