1. 程式人生 > >Python3爬蟲學習3:Beautiful Soup的用法

Python3爬蟲學習3:Beautiful Soup的用法

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)不依賴外部擴充套件