python中beautifulsoup是什么庫_BeautifulSoup庫詳解(個人整理)

BeautifulSoup4是爬蟲必學的技能。BeautifulSoup最主要的功能是從網頁抓取數據,Beautiful Soup自動將輸入文檔轉換為Unicode編碼,輸出文檔轉換為utf-8編碼。BeautifulSoup支持Python標準庫中的HTML解析器,還支持一些第三方的解析器,如果我們不安裝它,則 Python 會使用 Python默認的解析器,lxml 解析器更加強大,速度更快,推薦使用lxml 解析器。

一、簡介

靈活又方便的網頁解析庫,處理高效,支持多種解析器。

利用它不用編寫正則表達式即可方便地實現網頁信息的提取。

安裝:pip3 install BeautifulSoup4

解析器使用方法優勢劣勢

Python標準庫BeautifulSoup(markup, “html.parser”)Python的內置標準庫、執行速度適中 、文檔容錯能力強Python 2.7.3 or 3.2.2)前的版本中文容錯能力差

lxml HTML 解析器BeautifulSoup(markup, “lxml”)速度快、文檔容錯能力強需要安裝C語言庫

lxml XML 解析器BeautifulSoup(markup, “xml”)速度快、唯一支持XML的解析器需要安裝C語言庫

html5libBeautifulSoup(markup, “html5lib”)最好的容錯性、以瀏覽器的方式解析文檔、生成HTML5格式的文檔速度慢、不依賴外部擴展

二、基本用法

#基本用法from bs4 import BeautifulSoupbs = BeautifulSoup(html,"html.parser") # 縮進格式print(bs.prettify())print(bs.prettify()) # 格式化html結構print(bs.title) # 獲取title標簽的名稱print(bs.title.name) # 獲取title的nameprint(bs.title.string) # 獲取head標簽的所有內容print(bs.head) print(bs.div) # 獲取第一個div標簽中的所有內容print(bs.div["id"]) # 獲取第一個div標簽的id的值print(bs.a) print(bs.find_all("a")) # 獲取所有的a標簽print(bs.find(id="u1")) # 獲取id="u1"for item in bs.find_all("a"): print(item.get("href")) # 獲取所有的a標簽,并遍歷打印a標簽中的href的值for item in bs.find_all("a"): print(item.get_text())#選擇元素from bs4 import BeautifulSoupsoup = BeautifulSoup(html, "lxml")print(soup.title)print(type(soup.title))print(soup.head)print(soup.p)#獲取名稱print(soup.title.name)print(soup.p.attrs["name"])print(soup.p["name"])#獲取內容print(soup.p.string)#獲取子孫節點print(soup.p.children)for i, child in enumerate(soup.p.children): print(i, child)

3.find_all( name , attrs , recursive , text , **kwargs )

可根據標簽名、屬性、內容查找文檔,返回所有符合條件的內容

#通過標簽from bs4 import BeautifulSoupsoup = BeautifulSoup(html, "lxml")print(soup.find_all("ul"))print(type(soup.find_all("ul")[0]))#通過屬性print(soup.find_all(attrs={"id": "list-1"}))print(soup.find_all(attrs={"name": "elements"}))print(soup.find_all(id="list-1"))print(soup.find_all(class_="element"))#通過textprint(soup.find_all(text="Foo"))

4.find( name , attrs , recursive , text , **kwargs )

find返回單個元素,find_all返回所有元素

from bs4 import BeautifulSoupsoup = BeautifulSoup(html, "lxml")print(soup.find("ul"))print(type(soup.find("ul")))print(soup.find("page"))

find_parents() find_parent()

find_parents()返回所有祖先節點,find_parent()返回直接父節點。

find_next_siblings() find_next_sibling()

find_next_siblings()返回后面所有兄弟節點,find_next_sibling()返回后面第一個兄弟節點。

find_previous_siblings() find_previous_sibling()

find_previous_siblings()返回前面所有兄弟節點,find_previous_sibling()返回前面第一個兄弟節點。

find_all_next() find_next()

find_all_next()返回節點后所有符合條件的節點, find_next()返回第一個符合條件的節點

find_all_previous() 和 find_previous()

find_all_previous()返回節點后所有符合條件的節點, find_previous()返回第一個符合條件的節點

5.css選擇

通過select()直接傳入CSS選擇器即可完成選擇

from bs4 import BeautifulSoupsoup = BeautifulSoup(html, "lxml")print(soup.select(".panel .panel-heading"))print(soup.select("ul li"))print(soup.select("#list-2 .element"))print(type(soup.select("ul")[0]))for ul in soup.select("ul"): print(ul.select("li"))#獲得屬性for ul in soup.select("ul"): print(ul["id"]) print(ul.attrs["id"])#獲取內容for li in soup.select("li"): print(li.get_text())三、BeautifulSoup4四大對象種類

BeautifulSoup4將復雜HTML文檔轉換成一個復雜的樹形結構,每個節點都是Python對象,所有對象可以歸納為4種:

1.Tag

我們可以利用 soup 加標簽名輕松地獲取這些標簽的內容,這些對象的類型是bs4.element.Tag。但是注意,它查找的是在所有內容中的第一個符合要求的標簽。

print(type(bs.a))

對于 Tag,它有兩個重要的屬性,是 name 和 attrs:

2.NavigableString

既然我們已經得到了標簽的內容,那么問題來了,我們要想獲取標簽內部的文字怎么辦呢?很簡單,用 .string 即可

print(type(bs.title.string))

3.BeautifulSoup

BeautifulSoup對象表示的是一個文檔的內容。大部分時候,可以把它當作 Tag 對象,是一個特殊的 Tag,我們可以分別獲取它的類型,名稱,以及屬性

4.Comment

Comment 對象是一個特殊類型的 NavigableString 對象,其輸出的內容不包括注釋符號。

四、遍歷文檔樹

1、.contents:獲取Tag的所有子節點,返回一個list

# tag的.content 屬性可以將tag的子節點以列表的方式輸出print(bs.head.contents)# 用列表索引來獲取它的某一個元素print(bs.head.contents[1])

2、.children:獲取Tag的所有子節點,返回一個生成器

for child in bs.body.children: print(child)

3.descendants:獲取Tag的所有子孫節點

4、.strings:如果Tag包含多個字符串,即在子孫節點中有內容,可以用此獲取,而后進行遍歷

5、.stripped_strings:與strings用法一致,只不過可以去除掉那些多余的空白內容

6、.parent:獲取Tag的父節點

7、.parents:遞歸得到父輩元素的所有節點,返回一個生成器

8、.previous_sibling:獲取當前Tag的上一個節點,屬性通常是字符串或空白,真實結果是當前標簽與上一個標簽之間的頓號和換行符

9、.next_sibling:獲取當前Tag的下一個節點,屬性通常是字符串或空白,真是結果是當前標簽與下一個標簽之間的頓號與換行符

10、.previous_siblings:獲取當前Tag的上面所有的兄弟節點,返回一個生成器

11、.next_siblings:獲取當前Tag的下面所有的兄弟節點,返回一個生成器

12、.previous_element:獲取解析過程中上一個被解析的對象(字符串或tag),可能與previous_sibling相同,但通常是不一樣的

13、.next_element:獲取解析過程中下一個被解析的對象(字符串或tag),可能與next_sibling相同,但通常是不一樣的

14、.previous_elements:返回一個生成器,可以向前訪問文檔的解析內容

15、.next_elements:返回一個生成器,可以向后訪問文檔的解析內容

16、.has_attr:判斷Tag是否包含屬性

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/273195.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/273195.shtml
英文地址,請注明出處:http://en.pswp.cn/news/273195.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

iOS 設置系統音量和監聽系統音量變化

很簡單的調用 首先在工程引入MediaPlayer.framework #import <MediaPlayer/MediaPlayer.h> 1. 獲取系統音量 // 獲取系統音量 MPVolumeView *volumeView [[MPVolumeView alloc] init];UISlider *volumeViewSlider nil;for (UIView *view in [volumeView subviews]){if …

h5關于選擇器以及class的小加強

1、querySelector和querySelectorAll 這兩個方法類似于jquery的選擇器 document.querySelector(.box) document.querySelectorAll(.box)前者只能選擇一組中的第一個&#xff0c;后者選擇一組元素。 2、getElementsByClassName document.getElementsByClassName(box) 選擇的結…

1 睡眠喚醒_一勞永逸解決WIN10所有睡眠問題

1.初級階段&#xff0c;解決因硬件的喚醒事件powercfg -lastwake查看上次喚醒電腦的設備哪些硬件能喚醒電腦&#xff1f;powercfg /devicequery wake_armed列出現在可以喚醒電腦的所有硬件設備&#xff0c;可以看到現在鍵盤能喚醒powercfg /devicequery wake_programmable列出全…

[轉]Device Context 設備環境 設備上下文 理解

http://blog.csdn.net/p424671075/article/details/7235601轉載于:https://www.cnblogs.com/qrlozte/p/4582594.html

生成路徑 vs 設置_Simulink代碼生成之模型配置

歡迎關注我的微信公眾號【新能源動力電池與BMS】&#xff0c;頭條號&#xff1a;【阿Q在江湖】&#xff1b;所有文章資料會在公眾號首發。本文已同步錄制視頻講解&#xff1a;Simulink代碼生成之模型配置_視頻教程 - 知乎。PS&#xff1a;前段時間&#xff0c;傳出美國禁用一些…

常見電容器圖片_各種電容器圖片大集合

圖1是膽&#xff1b;圖2是燈具&#xff1b;圖3是mkph電容&#xff1b;圖4是met電容&#xff1b;圖5、圖10是pei電容&#xff1b;圖6是膽貼片電容&#xff1b;圖7是mpe電容&#xff1b;圖8是貼片電容&#xff1b;圖11是軸向電解電容器&#xff1b;圖12是mpp電容。圖1是ppn電容&a…

解析php混淆加密解密的手段,如 phpjm,phpdp神盾,php威盾

解析php混淆加密解密的手段&#xff0c;如 phpjm,phpdp神盾,php威盾 原文 解析php混淆加密解密的手段&#xff0c;如 phpjm,phpdp神盾,php威盾 php做為一門當下非常流行的web語言&#xff0c;常常看到有人求解密php文件&#xff0c;想當年的asp也是一樣。一些人不理解為什么要混…

bootstrap 合并菜單_Bootstrap與tab組合,切換菜單實例

Test$(function () {$(#myTab a:last).tab(show);//初始化顯示哪個tab$(#myTab a).click(function (e) {e.preventDefault();//阻止a鏈接的跳轉行為$(this).tab(show);//顯示當前選中的鏈接及關聯的content})})HomeProfileMessagesSettings服務器.home....profile...messages..…

WCF 宿主與通信模式(二)

宿主 每個WCF服務都必須托管在Windows進程中&#xff0c;該進程稱為宿主進程(host process) 單個宿主進程可以托管多個服務&#xff0c;相同的服務類型也可以托管在多個宿主進程中。 wcf中托管服務一般有一下四種&#xff1a; 寄宿方式 描述 Console寄宿 利于開發調試&#…

mysql端口被占用_MySQL重啟端口被占用處理

1,查看日志的ERROR2018-05-23T01:26:59.230382Z 0 [Warning] NO_AUTO_CREATE_USER sql mode was not set.2018-05-23T01:26:59.230409Z 0 [Note] --secure-file-priv is set to NULL. Operations related to importing and exporting data are disabled2018-05-23T01:26:59.230…

poj 3660 傳遞閉包 **

題意&#xff1a;題目給出了m對的相對關系&#xff0c;求有多少個排名是確定的。 鏈接&#xff1a;點我 如果這個點到其他點的關系是確定的&#xff0c;那么這個點就是確定的&#xff0c;注意如果這個點到不了其他點&#xff0c;但其他點能到這個點&#xff0c;那么這個點和其他…

C# 網絡編程之webBrowser獲取網頁url和下載網頁中圖片

該文章主要是通過C#網絡編程的webBrowser獲取網頁中的url并簡單的嘗試下載網頁中的圖片,主要是為以后網絡開發的基礎學習.其中主要的通過應用程序結合網頁知識、正則表達式實現瀏覽、獲取url、下載圖片三個功能.而且很清晰的解析了每一步都是以前一步為基礎實現的. 一.界面設計…

mysql員工腳本_mySQL常用腳本匯總

mysql的常用腳本有哪些呢&#xff1f;我們來做個總結建表語句sql語句最后指定主鍵DROP TABLE IF EXISTS user_info1;CREATE TABLE user_info1 (id int(11) NOT NULL AUTO_INCREMENT COMMENT 主鍵,name varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT 姓名,password varcha…

多線程 調用多線程的方法 Runtime與ProcessBuilder

一般我們使用Java運行其他類中的方法的時候&#xff0c;無論是靜態調用還是動態調用&#xff0c;都是在當前的進程中執行的。也就是只有一個Java虛擬機實例在運行。有時候需要通過Java代碼啟動多個Java子進程&#xff0c;這樣做會消耗些資源&#xff0c;但是程序變得更穩定。因…

mysql可連接_mysql開啟遠程可連接

1.打開cmd窗口&#xff0c;進入MySql安裝的bin目錄2.執行命令登錄數據庫,之后會出現一行要你輸入密碼的mysql -u root -p3.執行以下命令分配新用戶&#xff1a;grant all privileges on *.* to ‘用戶名‘‘IP地址‘ identified by ‘密碼‘;4.執行完上述命令后用下面的命令刷新…

ubuntu14.04 python2.7 安裝配置OpenCV3.0

環境&#xff1a;ubuntu14.04 python2.7 內容&#xff1a;安裝并配置OpenCV3.0 今天按照OpenCV官網上的步驟裝了OpenCV但是&#xff0c;裝好之后python提示“No module named cv2” 首先&#xff0c;安裝OpenCV的步驟&#xff1a; OpenCV官網的安裝步驟&#xff1a;http://doc…

mysql導出如何不區分大小寫_mysql 不區分大小寫

show variables like %case%-------------------------------| Variable_name | Value |-------------------------------| lower_case_file_system | OFF || lower_case_table_names | 1 | 表示已經是支持忽略大小寫了-------------------------------修改 /etc/mysql/…

[iOS] Win8下在Vmware11中安裝使用蘋果系統OS X 10.10

近來因為人事變動&#xff0c;領導打算安排我做 iOS 的項目&#xff0c;所以需要花一些時間提前準備一下iOS相關的東西。因為自己手頭上并沒有 Mac&#xff08;過年為了閑的時候能玩玩游戲買了聯想&#xff0c;唉&#xff09;&#xff0c;想想不能只靠每天在公司的時間練 demo …

html5的網絡書店圖書網站代碼_【技能提升】10個編寫HTML5的實用小技巧

1. 新的文檔類型(Doctype)html PUBLIC ”-//W3C//DTD XHTML 1.0 Transitional//EN”“http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>上面這個既麻煩又難記的XHTML文檔類型你還在使用嗎&#xff1f;如果還是這樣的話&#xff0c;現在該切換到新的HTML5文檔類型…

hdu2457 Trie圖+dp

hdu2457 給定n個模式串&#xff0c; 和一個文本串 問如果修改最少的字符串使得文本串不包含模式串&#xff0c; 輸出最少的次數&#xff0c;如果不能修改成功&#xff0c;則輸出-1 dp[i][j] 表示長度為i的字符串&#xff0c; 到達狀態j&#xff08;Trie圖中的結點&#xff09;…