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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

网页解析之BeautifulSoup

發布時間:2025/4/14 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网页解析之BeautifulSoup 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

介紹及安裝

Beautiful Soup 是一個HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 數據。
BeautifulSoup 用來解析 HTML 比較簡單,API非常人性化,支持CSS選擇器、Python標準庫中的HTML解析器,也支持 lxml 的 XML解析器。
Beautiful Soup 3 目前已經停止開發,推薦現在的項目使用Beautiful Soup 4。使用 pip 安裝即可:pip install beautifulsoup4

四大對象種類

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

  • Tag
  • NavigableString
  • BeautifulSoup
  • Comment

1.Tag

Tag 通俗點講就是 HTML 中的一個個標簽。

print(soup.p) # <p class="title" name="dromouse"><b>The Dormouse's story</b></p>print(type(soup.p)) # <class 'bs4.element.Tag'>

我們可以利用 soup 加標簽名輕松地獲取這些標簽的內容,這些對象的類型是bs4.element.Tag。
對于 Tag,它有兩個重要的屬性,是 name 和 attrs.

print(soup.name) # [document] soup 對象本身比較特殊,它的 name 即為 [document] print(soup.head.name) # head 對于其他內部標簽,輸出的值便為標簽本身的名稱 print(soup.p.attrs) # {'class': ['title'], 'name': 'dromouse'} print(soup.p['class']) # ['title']

NavigableString簡單來講就是一個可以遍歷的字符串。
例如:

print(soup.p.string) # The Dormouse's story print(type(soup.p.string)) # <class 'bs4.element.NavigableString'>

搜索文檔

Beautiful Soup定義了很多搜索方法,這里著重介紹2個: find() 和 find_all() .其它方法的參數和用法類似。

html_doc = """ <html><head><title>The Dormouse's story</title></head><p class="title"><b>The Dormouse's story</b></p><p class="story">Once upon a time there were three little sisters; and their names were <a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>, <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>; and they lived at the bottom of a well.</p><p class="story">...</p> """from bs4 import BeautifulSoup soup = BeautifulSoup(html_doc)

使用find_all等類似的方法可以查找想要的文檔內容。
在介紹find_all方法之前,先介紹一下過濾器的類型。

字符串

最簡單的過濾器是字符串。在搜索方法中傳入一個字符串參數,BeautifulSoup會查找與字符串完整匹配的內容。
例如:

查找所有的b標簽。 soup.find_all('b') # [<b>The Dormouse's story</b>]

正則表達式

find_all方法可以接受正則表示式作為參數,BeautifulSoup會通過match方法來匹配內容。

匹配以b開頭的標簽 for tag in soup.find_all(re.compile('^b')):print(tag.name) # body b 匹配包含t的標簽 for tag in soup.find_all(re.compile('t')):print(tag.name) # html title

列表

find_all方法也能接受列表參數,BeautifulSoup會將與列表中任一元素匹配的內容返回。

查找a標簽和b標簽 for tag in soup.find_all(['a','b']):print(tag.name) # b a a a

方法

如果沒有合適的過濾器,我們也可以自己定義一個方法,方法只接受一個元素參數。

匹配包含class屬性,但是不包括id屬性的標簽。 def has_class_but_no_id(tag):return tag.has_attr('class') and not tag.has_attr('id')print([tag.name for tag in soup.find_all(has_class_but_no_id)]) # ['p','p','p']

css選擇器

這就是另一種與 find_all 方法有異曲同工之妙的查找方法.

  • 寫 CSS 時,標簽名不加任何修飾,類名前加.,id名前加#

  • 在這里我們也可以利用類似的方法來篩選元素,用到的方法是 soup.select(),返回類型是 list

1.通過標簽名查找

print(soup.select('title')) #[<title>The Dormouse's story</title>]print(soup.select('a')) #[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]print(soup.select('b')) #[<b>The Dormouse's story</b>]

2.通過類名查找

print(soup.select('.sister')) #[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]

3.通過 id 名查找

print(soup.select('#link1')) #[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>]

4.組合查找

組合查找即和寫 class 文件時,標簽名與類名、id名進行的組合原理是一樣的,例如查找 p 標簽中,id 等于 link1的內容,二者需要用空格分開

print(soup.select('p #link1')) #[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>] 直接子標簽查找,則使用 > 分隔print(soup.select("head > title")) #[<title>The Dormouse's story</title>]

5.屬性查找

查找時還可以加入屬性元素,屬性需要用中括號括起來,注意屬性和標簽屬于同一節點,所以中間不能加空格,否則會無法匹配到。

print(soup.select('a[class="sister"]')) #[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]print(soup.select('a[href="http://example.com/elsie"]')) #[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>] 同樣,屬性仍然可以與上述查找方式組合,不在同一節點的空格隔開,同一節點的不加空格print(soup.select('p a[href="http://example.com/elsie"]')) #[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>]

6.獲取內容

以上的 select 方法返回的結果都是列表形式,可以遍歷形式輸出,然后用 get_text() 方法來獲取它的內容。

soup = BeautifulSoup(html, 'lxml') print(type(soup.select('title'))) print(soup.select('title')[0].get_text())for title in soup.select('title'):print(title.get_text())

===============================================================================================

通過tag標簽逐層查找: soup.select("body a") 找到某個tag標簽下的直接子標簽 soup.select("head > title") 通過CSS的類名查找: soup.select(".sister") 通過tag的id查找: soup.select("#link1") 通過是否存在某個屬性來查找: soup.select('a[href]') 通過屬性的值來查找: soup.select('a[href="http://example.com/elsie"]')

轉載于:https://www.cnblogs.com/pythoner6833/p/8960785.html

總結

以上是生活随笔為你收集整理的网页解析之BeautifulSoup的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 男男在线观看 | 亚洲欧美在线看 | 18禁裸男晨勃露j毛免费观看 | 中国免费看的片 | 久久久99精品国产一区二区三区 | 欧美性白人极品1819hd | 亚洲视频在线观看一区二区三区 | 日韩欧美一区二区一幕 | 日本激情视频在线观看 | 精品国产午夜福利在线观看 | 国产成人一区二区三区影院在线 | 在线免费观看国产 | 网红日批视频 | 极品少妇av | 国产交换配乱淫视频免费 | 国产传媒视频在线观看 | 色图自拍偷拍 | 国产精品久久久 | 国产 欧美 日韩 一区 | 女人的天堂网 | 91丨porny丨在线中文 | 亚洲の无码国产の无码步美 | av在线播放中文字幕 | 国产农村妇女精品久久久 | 久草免费新视频 | 91精品国产高清一区二区三区蜜臀 | 饥渴放荡受np公车奶牛 | 欧美极品一区二区三区 | 亚洲制服另类 | 国模福利视频 | 经典三级第一页 | 吊侵犯の奶水授乳羞羞漫画 | 欧美日本韩国在线 | 日韩影院一区二区 | 亚洲天堂视频网 | 在线观看亚洲区 | 亚洲瘦老头同性xxxxx | 老司机精品福利视频 | 无码人妻精品一区二区三区99不卡 | 丰满放荡岳乱妇91ww | 亚洲精品日韩丝袜精品 | 大香伊人 | 亚洲人xxx | 亚洲欧洲天堂 | 亚洲AV无码精品自拍 | 一区二区三区中文字幕 | 在线观看国产一区二区三区 | 女人被男人躁得好爽免费视频 | 曰韩一级片 | 日本福利在线 | 少妇又白又嫩又色又粗 | 成人里番精品一区二区 | 耳光调教vk| 99re7| 深夜精品| 久久都是精品 | 91久久一区二区三区 | 最近最新mv字幕观看 | 色婷婷av一区二区三区之e本道 | 国产3p精品一区 | 男女裸体影院高潮 | 99热一区二区三区 | 在线观看亚洲av每日更新 | 少妇精品一区二区三区 | 日本乳汁视频 | 欧美成人三级在线观看 | 舔花蒂 | 老汉色av| 网站在线播放 | 打美女白嫩屁屁网站 | 韩国电影大尺度在线观看 | 免费二区| 国产视频综合在线 | 成年视频在线 | 午夜精品久久99蜜桃的功能介绍 | 亚洲自拍天堂 | 日韩亚洲欧美一区二区三区 | 国产一二三在线视频 | 亚洲精品一区久久久久久 | 日韩va亚洲va欧美va久久 | 黄色在线免费观看网站 | 男同志毛片特黄毛片 | 国模杨依粉嫩蝴蝶150p | 韩国av三级 | 夫妻精品 | 麻豆成人在线观看 | 快播久久 | 少妇高潮喷水在线观看 | 中文字幕在线视频观看 | 日本久久久网站 | 国产在线1区 | 人妻无码中文字幕免费视频蜜桃 | 色xxxxx| 色哟哟免费观看 | 羞辱狗奴的句子有哪些 | 在线观看污污视频 | 在线观看精品视频 | 秋霞精品一区二区三区 | 欧美久久激情 |