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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python中beautifulsoup是什么库_BeautifulSoup库详解(个人整理)

發(fā)布時(shí)間:2023/12/10 python 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中beautifulsoup是什么库_BeautifulSoup库详解(个人整理) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

BeautifulSoup4是爬蟲必學(xué)的技能。BeautifulSoup最主要的功能是從網(wǎng)頁抓取數(shù)據(jù),Beautiful Soup自動(dòng)將輸入文檔轉(zhuǎn)換為Unicode編碼,輸出文檔轉(zhuǎn)換為utf-8編碼。BeautifulSoup支持Python標(biāo)準(zhǔn)庫中的HTML解析器,還支持一些第三方的解析器,如果我們不安裝它,則 Python 會(huì)使用 Python默認(rèn)的解析器,lxml 解析器更加強(qiáng)大,速度更快,推薦使用lxml 解析器。

一、簡介

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

利用它不用編寫正則表達(dá)式即可方便地實(shí)現(xiàn)網(wǎng)頁信息的提取。

安裝:pip3 install BeautifulSoup4

解析器使用方法優(yōu)勢(shì)劣勢(shì)

Python標(biāo)準(zhǔn)庫BeautifulSoup(markup, “html.parser”)Python的內(nèi)置標(biāo)準(zhǔn)庫、執(zhí)行速度適中 、文檔容錯(cuò)能力強(qiáng)Python 2.7.3 or 3.2.2)前的版本中文容錯(cuò)能力差

lxml HTML 解析器BeautifulSoup(markup, “l(fā)xml”)速度快、文檔容錯(cuò)能力強(qiáng)需要安裝C語言庫

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

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

二、基本用法

#基本用法from bs4 import BeautifulSoupbs = BeautifulSoup(html,"html.parser") # 縮進(jìn)格式print(bs.prettify())print(bs.prettify()) # 格式化html結(jié)構(gòu)print(bs.title) # 獲取title標(biāo)簽的名稱print(bs.title.name) # 獲取title的nameprint(bs.title.string) # 獲取head標(biāo)簽的所有內(nèi)容print(bs.head) print(bs.div) # 獲取第一個(gè)div標(biāo)簽中的所有內(nèi)容print(bs.div["id"]) # 獲取第一個(gè)div標(biāo)簽的id的值print(bs.a) print(bs.find_all("a")) # 獲取所有的a標(biāo)簽print(bs.find(id="u1")) # 獲取id="u1"for item in bs.find_all("a"): print(item.get("href")) # 獲取所有的a標(biāo)簽,并遍歷打印a標(biāo)簽中的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"])#獲取內(nèi)容print(soup.p.string)#獲取子孫節(jié)點(diǎn)print(soup.p.children)for i, child in enumerate(soup.p.children): print(i, child)

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

可根據(jù)標(biāo)簽名、屬性、內(nèi)容查找文檔,返回所有符合條件的內(nèi)容

#通過標(biāo)簽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返回單個(gè)元素,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()返回所有祖先節(jié)點(diǎn),find_parent()返回直接父節(jié)點(diǎn)。

find_next_siblings() find_next_sibling()

find_next_siblings()返回后面所有兄弟節(jié)點(diǎn),find_next_sibling()返回后面第一個(gè)兄弟節(jié)點(diǎn)。

find_previous_siblings() find_previous_sibling()

find_previous_siblings()返回前面所有兄弟節(jié)點(diǎn),find_previous_sibling()返回前面第一個(gè)兄弟節(jié)點(diǎn)。

find_all_next() find_next()

find_all_next()返回節(jié)點(diǎn)后所有符合條件的節(jié)點(diǎn), find_next()返回第一個(gè)符合條件的節(jié)點(diǎn)

find_all_previous() 和 find_previous()

find_all_previous()返回節(jié)點(diǎn)后所有符合條件的節(jié)點(diǎn), find_previous()返回第一個(gè)符合條件的節(jié)點(diǎn)

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"])#獲取內(nèi)容for li in soup.select("li"): print(li.get_text())三、BeautifulSoup4四大對(duì)象種類

BeautifulSoup4將復(fù)雜HTML文檔轉(zhuǎn)換成一個(gè)復(fù)雜的樹形結(jié)構(gòu),每個(gè)節(jié)點(diǎn)都是Python對(duì)象,所有對(duì)象可以歸納為4種:

1.Tag

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

print(type(bs.a))

對(duì)于 Tag,它有兩個(gè)重要的屬性,是 name 和 attrs:

2.NavigableString

既然我們已經(jīng)得到了標(biāo)簽的內(nèi)容,那么問題來了,我們要想獲取標(biāo)簽內(nèi)部的文字怎么辦呢?很簡單,用 .string 即可

print(type(bs.title.string))

3.BeautifulSoup

BeautifulSoup對(duì)象表示的是一個(gè)文檔的內(nèi)容。大部分時(shí)候,可以把它當(dāng)作 Tag 對(duì)象,是一個(gè)特殊的 Tag,我們可以分別獲取它的類型,名稱,以及屬性

4.Comment

Comment 對(duì)象是一個(gè)特殊類型的 NavigableString 對(duì)象,其輸出的內(nèi)容不包括注釋符號(hào)。

四、遍歷文檔樹

1、.contents:獲取Tag的所有子節(jié)點(diǎn),返回一個(gè)list

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

2、.children:獲取Tag的所有子節(jié)點(diǎn),返回一個(gè)生成器

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

3.descendants:獲取Tag的所有子孫節(jié)點(diǎn)

4、.strings:如果Tag包含多個(gè)字符串,即在子孫節(jié)點(diǎn)中有內(nèi)容,可以用此獲取,而后進(jìn)行遍歷

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

6、.parent:獲取Tag的父節(jié)點(diǎn)

7、.parents:遞歸得到父輩元素的所有節(jié)點(diǎn),返回一個(gè)生成器

8、.previous_sibling:獲取當(dāng)前Tag的上一個(gè)節(jié)點(diǎn),屬性通常是字符串或空白,真實(shí)結(jié)果是當(dāng)前標(biāo)簽與上一個(gè)標(biāo)簽之間的頓號(hào)和換行符

9、.next_sibling:獲取當(dāng)前Tag的下一個(gè)節(jié)點(diǎn),屬性通常是字符串或空白,真是結(jié)果是當(dāng)前標(biāo)簽與下一個(gè)標(biāo)簽之間的頓號(hào)與換行符

10、.previous_siblings:獲取當(dāng)前Tag的上面所有的兄弟節(jié)點(diǎn),返回一個(gè)生成器

11、.next_siblings:獲取當(dāng)前Tag的下面所有的兄弟節(jié)點(diǎn),返回一個(gè)生成器

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

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

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

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

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

總結(jié)

以上是生活随笔為你收集整理的python中beautifulsoup是什么库_BeautifulSoup库详解(个人整理)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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