日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python 网络爬虫笔记3 -- Beautiful Soup库

發(fā)布時間:2025/3/12 python 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 网络爬虫笔记3 -- Beautiful Soup库 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Python 網(wǎng)絡(luò)爬蟲筆記3 – Beautiful Soup庫


Python 網(wǎng)絡(luò)爬蟲系列筆記是筆者在學(xué)習(xí)嵩天老師的《Python網(wǎng)絡(luò)爬蟲與信息提取》課程及筆者實踐網(wǎng)絡(luò)爬蟲的筆記。

課程鏈接:Python 網(wǎng)絡(luò)爬蟲與信息提取
參考文檔:
Requests 官方文檔(英文)
Requests 官方文檔(中文)
Beautiful Soup 官方文檔
re 官方文檔
Scrapy 官方文檔(英文)
Scrapy 官方文檔(中文)


一、Beautiful Soup 庫安裝


介紹: Beautiful Soup庫主要是用來處理使用requests庫獲得的HTML網(wǎng)頁文件

pip 安裝:

pip install beautifulsoup4

導(dǎo)入模塊:

from bs4 import BeautifulSoup

測試:

import requests from bs4 import BeautifulSoupr = requests.get('https://python123.io/ws/demo.html') demo = r.text soup = BeautifulSoup(demo, 'html.parser') # 以樹形的結(jié)構(gòu)打印HTML文件,Tag元素也可使用prettify()方法 print(soup.prettify()) print(soup.a.prettify())

二、Beautiful Soup 庫基礎(chǔ)


1、標簽樹

  • 標簽:一對<>及其中間的內(nèi)容
# 標簽示例 <p class=“title”> … </p> 基本元素說明
Tag標簽,最基本的信息組織單元,分別用<>和</>標明開頭和結(jié)尾
Name標簽的名字,< p >…< /p >的名字是’p’,格式:< tag>.name
Attributes標簽的屬性,字典形式組織,格式:< tag>.attrs
NavigableString標簽內(nèi)非屬性字符串,<>…</>中字符串,格式:< tag>.string
Comment標簽內(nèi)字符串的注釋部分,一種特殊的Comment類型。格式:<!-- xxxx – >
import requests from bs4 import BeautifulSoupdef tag_element():"""BeautifulSoup 的 tag,及其屬性:return:"""html = requests.get('https://python123.io/ws/demo.html')soup = BeautifulSoup(html.text, 'html.parser')# Tagtag = soup.pprint(type(tag))print(tag)# Namename = tag.nameprint(type(name))print(name)# Attributesattrs = tag.attrsprint(type(attrs))print(attrs)# NavigableStringcontent = tag.stringprint(type(content))print(content)# Commentsoup1 = BeautifulSoup('<b><!--This is a comment--></b>', 'html.parser')comment = soup1.b.stringprint(type(comment))print(comment)if __name__ == '__main__':print('running bs:')tag_element()
  • 標簽樹:不同層級的標簽組成的樹形結(jié)構(gòu),構(gòu)成HTML網(wǎng)頁
# 標簽樹示例 <HTML><head><title>網(wǎng)頁的標題,就是網(wǎng)頁選項卡的名稱</title></head><body>瀏覽器頁面顯示的內(nèi)容</body> </HTML>

2、解析器

解析HTML網(wǎng)頁的解析器,自帶解析器為 ‘html.parser’,可以安裝其它解析器。

解析器使用方法安裝
bs4的HTML解析器BeautifulSoup(mk,‘html.parser’)bs4庫自帶
lxml的HTML解析器BeautifulSoup(mk,‘lxml’)pip install lxml
lxml的XML解析器BeautifulSoup(mk,‘xml’)pip install lxml
html5lib的解析器BeautifulSoup(mk,‘html5lib’)pip install html5lib

三、HTML 內(nèi)容遍歷



1、下行遍歷

屬性說明
.contents子節(jié)點的列表,將所有兒子節(jié)點存入列表
.children子節(jié)點的迭代類型,與.contents類似,用于循環(huán)遍歷兒子節(jié)點
.descendants子孫節(jié)點的迭代類型,包含所有子孫節(jié)點,用于循環(huán)遍歷
import requests from bs4 import BeautifulSoupdef x_traversal():"""下行遍歷"""html = requests.get('https://python123.io/ws/demo.html')soup = BeautifulSoup(html.text, 'html.parser')# 子節(jié)點的列表print(soup.body.contents)# 遍歷兒子節(jié)點for child in soup.body.children:print(child)# 遍歷子孫節(jié)點for child in soup.body.descendants:print(child)if __name__ == '__main__':print('running bs:')x_traversal()

2、上行遍歷

屬性說明
.parent節(jié)點的父親標簽
.parents節(jié)點先輩標簽的迭代類型,用于循環(huán)遍歷先輩節(jié)點
import requests from bs4 import BeautifulSoupdef s_traversal():"""上行遍歷"""html = requests.get('https://python123.io/ws/demo.html')soup = BeautifulSoup(html.text, 'html.parser')# 父節(jié)點print(soup.title.parent)# 遍歷先輩節(jié)點for parent in soup.a.parents:if parent is None:print(parent)else:print(parent.name)if __name__ == '__main__':print('running bs:')s_traversal()

3、平行遍歷

node: 平行遍歷的對象是同一節(jié)點下的平行節(jié)點

屬性說明
.next_sibling返回按照HTML文本順序的下一個平行節(jié)點標簽
.previous_sibling返回按照HTML文本順序的上一個平行節(jié)點標簽
.next_siblings迭代類型,返回按照HTML文本順序的后續(xù)所有平行節(jié)點標簽
.previous_siblings迭代類型,返回按照HTML文本順序的前續(xù)所有平行節(jié)點標簽
import requests from bs4 import BeautifulSoupdef p_traversal():"""平行遍歷"""html = requests.get('https://python123.io/ws/demo.html')soup = BeautifulSoup(html.text, 'html.parser')# 后一節(jié)點print(soup.a.next_sibling)# 前一節(jié)點print(soup.a.previous_sibling)# 遍歷后續(xù)節(jié)點for sibling in soup.a.next_siblings:print(sibling)# 遍歷前續(xù)節(jié)點for sibling in soup.a.previous_siblings:print(sibling)if __name__ == '__main__':print('running bs:')p_traversal()

總結(jié)

以上是生活随笔為你收集整理的Python 网络爬虫笔记3 -- Beautiful Soup库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。