python之Beautiful Soup庫

一、簡介

  簡單來講,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 解析器更增強大,速度更快,推薦安裝。

  

3. 使用方法

  最佳方法參考官方文檔: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])
相關文章
相關標籤/搜索