Python3爬蟲學習3:Beautiful Soup的用法
阿新 • • 發佈:2019-02-08
Beautiful Soup的用法
之前通過urllib.request模組可以將網頁當作本地檔案來讀取,那麼獲得網頁的html程式碼後,自然就是要將我們所需要的部分從雜亂的html程式碼中分離出來。既然要做資料的查詢和提取,當然我們首先想到的應該是正則表示式的方式,而正則表示式書寫的複雜我想大家都有體會,而且Python中的正則表示式和其他語言中的並沒有太大區別,也就不贅述了,所以現在介紹Python中一種比較友好且易用的資料提取方式——Beautiful Soup
這裡是官方文件
還有貼心的中文文件
Beautiful Soup是一個可以從HTML或XML檔案中提取資料的Python庫.它能夠通過你喜歡的轉換器實現慣用的文件導航,查詢,修改文件的方式.
文件中的例子其實說的已經比較清楚了,那下面就以爬取簡書首頁文章的標題一段程式碼來演示一下:
先來看簡書首頁的原始碼:
這裡寫程式碼片
find_all('a', 'title')
便可獲得所有的文章標題,具體實現程式碼及結果如下:
# -*- coding:utf-8 -*-
from urllib import request
from bs4 import BeautifulSoup
url = r'http://www.jianshu.com'
# 模擬真實瀏覽器進行訪問
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')
# 將獲取到的內容轉換成BeautifulSoup格式,並將html.parser作為解析器
soup = BeautifulSoup(page_info, 'html.parser')
# 以格式化的形式列印html
# print(soup.prettify())
titles = soup.find_all('a', 'title' ) # 查詢所有a標籤中class='title'的語句
# 列印查詢到的每一個a標籤的string
for title in titles:
print(title.string)
作者:Veniendeavor
連結:http://www.jianshu.com/p/f7b0a39f66d0
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
PS:關於解析器
Beautiful Soup支援Python標準庫中的HTML解析器,還支援一些第三方的解析器,下表列出了主要的解析器,以及它們的優缺點:
解析器 | 使用方法 | 優勢 | 劣勢 |
---|---|---|---|
Python標準庫 | BeautifulSoup(markup, “html.parser”) | (1)Python的內建標準庫(2)執行速度適中(3)文件容錯能力強 | Python 2.7.3 or 3.2.2)前 的版本中文件容錯能力差 |
lxml HTML 解析器 | BeautifulSoup(markup, “lxml”) | (1)速度快(2)文件容錯能力強 | 需要安裝C語言庫 |
lxml XML 解析器 | BeautifulSoup(markup, [“lxml”, “xml”]) OR BeautifulSoup(markup, “xml”) | (1)速度快(2)唯一支援XML的解析器 | 需要安裝C語言庫 |
html5lib | BeautifulSoup(markup, “html5lib”) | (1)最好的容錯性(2)以瀏覽器的方式解析文件(3)生成HTML5格式的文件 | (1)速度慢(2)不依賴外部擴充套件 |