BeautifulSoup库使用
生活随笔
收集整理的這篇文章主要介紹了
BeautifulSoup库使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- BeautifulSoup庫使用
- 案例: requests結合BS4實現深度爬取三國演義整部小說
BeautifulSoup庫使用
BeautifulSoup庫介紹
BeautifulSoup也是一個解析庫
BS解析數據是依賴解析器的, BS支持的解析器有html.parser, lxml, xml, html5lib等, 其中lxml解析器解析速度快, 容錯能力強.
BS現階段應用的解析器多數是lxml
BeautifulSoup 使用步驟:
from bs4 import BeautifulSoupsoup = BeautifulSoup(res.text, 'lxml') tag = soup.select("CSS選擇器表達式") # 返回一個列表選擇器分類:
- 節點選擇器
- 方法選擇器
- CSS選擇器
CSS選擇器
1.根據節點名及節點層次關系定位標簽: 標簽選擇器 & 層級選擇器 soup.select('title') soup.select('div > ul > li') # 單層級選擇器 soup.select('div li') # 多層級選擇器2.根據節點的class屬性定位標簽: class選擇器(classical: 經典) soup.select('.panel')3.根據id屬性定位標簽: id選擇器 soup.select('#item')4.嵌套選擇: ul_list = soup.select('ul') # 得到的依然是一個列表數據類型 for ul in ul_list:print(ul.select('li'))# 獲取節點的文本或屬性: tag_obj.string: 獲取直接子文本-->如果節點內有與直系文本平行的節點, 該方法拿到的是None tag_obj.get_text(): 獲取子孫節點的所有文本 tag_obj['attribute']: 獲取節點屬性練習示例:
html = '''<div class="panel"><div class="panel-heading"><h4>BeautifulSoup練習</h4></div><div>這是一個div的直接子文本<p>這是一個段落</p></div><a href="https://www.baidu.com">這是百度的跳轉連接</a><div class="panel-body"><ul class="list" id="list-1"><li class="element">第一個li標簽</li><li class="element">第二個li標簽</li><li class="element">第三個li標簽</li></ul><ul class="list list-small"><li class="element">one</li><li class="element">two</li></ul><li class="element">測試多層級選擇器</li></div></div> ''' from bs4 import BeautifulSoupsoup = BeautifulSoup(html, 'lxml') # 1.根據節點名定位節點, 獲取其文本 h4 = soup.select('h4') # 標簽選擇器 print(h4[0].get_text())# 2.根據class屬性定位節點 panel = soup.select('.panel-heading') print(panel)# 3.根據id屬性定位節點 ul = soup.select('#list-1') print(ul)# 4.嵌套選擇 ul_list = soup.select('ul') for ul in ul_list:li = ul.select('li')print(li)# 5.單層級選擇器與多層級選擇器 li_list_single = soup.select(".panel-body > ul > li") li_list_multi = soup.select(".panel-body li")案例: requests結合BS4實現深度爬取三國演義整部小說
import requests from bs4 import BeautifulSoupurl = 'http://www.shicimingju.com/book/sanguoyanyi.html' headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36' } res = requests.get(url=url, headers=headers) soup = BeautifulSoup(res.text, 'lxml') a_list = soup.select(".book-mulu ul li a") for item in a_list:name = item.stringhref = item["href"]# print(href)full_url = 'http://www.shicimingju.com' + hrefdetail_page = requests.get(url=full_url, headers=headers).textsoup_detail = BeautifulSoup(detail_page, 'lxml')div = soup_detail.select(".chapter_content")[0]print(type(div.get_text()))with open('%s.txt' % name, 'w', encoding="utf-8") as f:f.write(div.get_text())總結
以上是生活随笔為你收集整理的BeautifulSoup库使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: xpath解析库的语法及使用
- 下一篇: Selenium 与 PhantomJS