Beautiful Soup是python的一個庫,最主要的功能是從網頁抓取數據。官方解釋以下:html
Beautiful Soup提供一些簡單的、python式的函數用來處理導航、搜索、修改分析樹等功能。它是一個工具箱,經過解析文檔爲用戶提供須要抓取的數據,由於簡單,因此不須要多少代碼就能夠寫出一個完整的應用程序。 Beautiful Soup自動將輸入文檔轉換爲Unicode編碼,輸出文檔轉換爲utf-8編碼。你不須要考慮編碼方式,除非文檔沒有指定一個編碼方式,這時,Beautiful Soup就不能自動識別編碼方式了。而後,你僅僅須要說明一下原始編碼方式就能夠了。 Beautiful Soup已成爲和lxml、html6lib同樣出色的python解釋器,爲用戶靈活地提供不一樣的解析策略或強勁的速度。
(1) 根據標籤名查找 - suop.a 只能找到第一個符合要求的標籤 (2) 獲取屬性值 - suop.a.attrs 獲取a全部的屬性和屬性值,返回一個字典 - suop.a.attrs["href"] 獲取href屬性值 - suop.a["href"] 簡寫爲這種形式 (3) 獲取內容 - suop.a.string 獲取標籤中直系的文本內容 - suop.a.text 獲取全部標籤中的文本內容 - suop.a.get_text() 獲取全部標籤中的文本內容 【注意】若是標籤中還有標籤,那麼string獲取到的結果爲None,其餘兩個方法能夠獲取到文本內容 (4) find 找到第一個符合要求的標籤 - suop.find("a") 找到第一個符合要求的 # 根據標籤中的屬性獲取指定的a標籤 - suop.find("a", class_="xxx") # class是關鍵字須要加_ - suop.find("a", id="xxx") - suop.find("a", href="xxx") - suop.find("a", alt="xxx") - suop.find("a", tetle="xxx") # 能夠和獲取內容的方法連用 - suop.find("a",href="/hecheng/27.html").text (5) find_all 找到全部符合要求的標籤 - suop.find_all("a") - suop.find_all(["a","p"]) 找到全部a標籤和p標籤 - suop.find_all(["a","p"],limit=2) 取前兩個 (6) 根據選擇器選擇指定的內容 select:suop.select("#id") - 常見的選擇器:標籤選擇器(a)|類選擇器(.)|id選擇器(#)|層級選擇器 - 層級選擇器: div .mm div下面全部class屬性值爲mm的,子子孫孫,下面多級 div > .dd div兒子級class屬性爲dd的,下面一級 【注意】查詢到的是全部數據,返回列表
import requests import lxml from bs4 import BeautifulSoup url = "http://www.shicimingju.com/book/sanguoyanyi.html" response = requests.get(url).text suop = BeautifulSoup(response,'lxml') # 實例化對象,使用lxml進行解析 a_list = suop.select('.book-mulu > ul > li > a') url = "http://www.shicimingju.com" for a in a_list: fiction_name = a.string # 小說章節名稱 fiction_url = url+a["href"] # 小說章節url地址 response = requests.get(fiction_url).text # 請求每一個章節的url地址 suop = BeautifulSoup(response,'lxml') content = suop.find("div",class_="chapter_content").text # 獲取標籤內全部文本數據 with open("./{}.txt".format(fiction_name),"w",encoding="utf-8") as fp: fp.write(content) print("下載成功!!!")