簡單來講,Beautiful Soup是python的一個庫,最主要的功能是從網頁抓取數據。官方解釋以下:css
Beautiful Soup提供一些簡單的、python式的函數用來處理導航、搜索、修改分析樹等功能。它是一個工具箱,經過解析文檔爲用戶提供須要抓取的數據,由於簡單,因此不須要多少代碼就能夠寫出一個完整的應用程序。html
Beautiful Soup自動將輸入文檔轉換爲Unicode編碼,輸出文檔轉換爲utf-8編碼。你不須要考慮編碼方式,除非文檔沒有指定一個編碼方式,這時,Beautiful Soup就不能自動識別編碼方式了。而後,你僅僅須要說明一下原始編碼方式就能夠了。html5
Beautiful Soup已成爲和lxml、html6lib同樣出色的python解釋器,爲用戶靈活地提供不一樣的解析策略或強勁的速度。python
Beautiful Soup 3 目前已經中止開發,推薦在如今的項目中使用Beautiful Soup 4,不過它已經被移植到BS4了,也就是說導入時咱們須要 from bs4 import BeautifulSoup 。因此這裏咱們用的版本是 Beautiful Soup 4.3.2 (簡稱BS4)。web
一、快速安裝瀏覽器
1
|
pip install beautifulsoup4
|
二、若是想安裝最新的版本,請直接下載安裝包來手動安裝,也是十分方便的方法scrapy
一、Beautiful Soup3.2.1函數
https://pypi.python.org/pypi/BeautifulSoup/3.2.1工具
二、Beautiful Soup4.3.2測試
https://pypi.python.org/pypi/beautifulsoup4/
下載完成以後解壓
運行下面的命令便可完成安裝
python setup.py install
三、而後須要安裝 lxml
pip install lxml
另外一個可供選擇的解析器是純Python實現的 html5lib , html5lib的解析方式與瀏覽器相同,能夠選擇下列方法來安裝html5lib:
pip install html5lib
Beautiful Soup支持Python標準庫中的HTML解析器,還支持一些第三方的解析器,若是咱們不安裝它,則 Python 會使用 Python默認的解析器,lxml 解析器更增強大,速度更快,推薦安裝。
最佳方法參考官方文檔:https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/
如下內容測試css和xpath分別提取文本和屬性的區別,方便後續查看
from scrapy.selector import Selector from scrapy.http import HtmlResponse from bs4 import BeautifulSoup as bs body = '''<html> <head> <base href='http://example.com/' /> <title id="txt">Example website</title> </head> <body> <div id='images'> <a href='image1.html'>Name: My image 1 <br /><img src='image1_thumb.jpg' /></a> <a href='image2.html'>Name: My image 2 <br /><img src='image2_thumb.jpg' /></a> <a href='image3.html'>Name: My image 3 <br /><img src='image3_thumb.jpg' /></a> <a href='image4.html'>Name: My image 4 <br /><img src='image4_thumb.jpg' /></a> <a href='image5.html'>Name: My image 5 <br /><img src='image5_thumb.jpg' /></a>"div text"</div> <div>helloworld test</div> </body> </html>''' soup = bs(body, "lxml") print("css獲取屬性:",soup.select("div")[0].attrs["id"]) print("xpath獲取屬性:",Selector(text=body).xpath("//div/@id").extract()[0]) print("css獲取文本:", soup.select("title[id='txt']")[0].string) print("xpath獲取文本:",Selector(text=body).xpath("//title[@id='txt']/text()").extract()[0])