日韩性视频-久久久蜜桃-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的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 久久午夜伦理 | 国产69精品久久久 | 日本美女裸体视频 | av在线高清观看 | 免费av电影网址 | 18久久久| 日韩精品人妻中文字幕 | 天天射天天草 | 久草麻豆 | 亚洲v日韩v综合v精品v | 强侵犯の奶水授乳羞羞漫虐 | 久久人妻少妇嫩草av无码专区 | 手机版av| 日韩中字在线 | 一区二区视屏 | 欧美交换配乱吟粗大25p | 欧美日韩在线视频播放 | 99riAv国产精品无码鲁大师 | 美美女高清毛片视频免费观看 | 国产又黄又猛 | 手机在线看a | 青青草一区 | aaa一级片| 国产精品乱码久久久久久久久 | 国产精品传媒视频 | 国产一区视频在线免费观看 | 欧美福利视频一区二区 | 亚洲一区二区三区四区视频 | 污视频网站在线播放 | 国产丝袜在线视频 | 久久久久五月天 | av成人动漫| 精品久久9999| 成人免费黄色 | 青青草综合在线 | av久久久 | 久久亚洲精品国产精品黑人v | www.xxxx国产 | 一区二区男女 | 成人综合婷婷国产精品久久 | 欧美日本另类 | 欧美日韩在线综合 | 三上悠亚一区二区三区 | 青青色在线视频 | av中文字幕免费在线观看 | 国产在线第二页 | 国产精品久久久久久久 | 50部乳奶水在线播放 | 欧美久久久久久久久中文字幕 | 天堂资源av| 黄色1级片| av小说在线| 一区二区三区四区五区在线视频 | 欧美激情xxxxx| 噜噜色av | 亚洲 小说区 图片区 都市 | 国产精品久久久久久免费播放 | 性色av网 | 国产精品国产三级国产专区51 | 国产午夜毛片 | 国产精品伦一区 | 香蕉私人影院 | 亚洲一区二区三区久久 | 高清日韩一区二区 | 日本午夜在线视频 | 看全色黄大色黄大片女一次牛 | 久久在线看 | 亚洲第一av网站 | 国产尤物在线 | 日韩在线观看第一页 | 亚洲大胆 | 一色桃子juy758在线播放 | 青青草视频在线观看免费 | 亚洲a黄| 午夜精品久久久久久久91蜜桃 | 韩国一级片在线观看 | 国产伦精品一区二区 | 懂色aⅴ一区二区三区免费 国产精品99在线观看 | 黑人欧美一区二区三区 | 中国黄色一级视频 | 国产亚洲色婷婷久久99精品 | 久久综合色视频 | 中文字幕日日夜夜 | 亚洲色欲色欲www | 无码国产69精品久久久久网站 | 熟妇高潮一区二区高潮 | 亚洲福利精品视频 | 国产精品久久久久久69 | 久久久国产成人一区二区三区 | av在线浏览| 免费观看全黄做爰的视频 | 欧美色xxxxx 日本精品一区二区三区四区的功能 | 午夜羞羞影院 | 亚洲一区二区三区av无码 | 亚洲国产一区二区三区a毛片 | 久久久久一区二区 | 欧美日韩精品综合 | av大片免费看 | 国产哺乳奶水91在线播放 |