beautifulSoup常用方法


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

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

NavigableString:獲取標簽內部的文字,如,soup.p.string

BeautifulSoup:表示一個文檔的全部內容。大部分時候,可以把它當作 Tag 對象,是一個特殊的 Tag。

Comment:Comment 對象是一個特殊類型的 NavigableString 對象,其輸出的內容不包括注釋符號,但是如果不好好處理它,可能會對我們的文本處理造成意想不到的麻煩。

裝載BeautifulSoup

from bs4 import BeautifulSoup
import requests

url = 'http://python123.io/ws/demo.html'
r = requests.get(url)
demo = r.text  # 服務器返回響應

soup = BeautifulSoup(demo, "html.parser")
"""
demo 表示被解析的html格式的內容
html.parser表示解析用的解析器
"""
print(soup)  # 輸出響應的html對象

輸出結果

  

 

print(soup.title)  # 獲取html的title標簽的信息
print(soup.a)  # 獲取html的a標簽的信息(soup.a默認獲取第一個a標簽,想獲取全部就用for循環去遍歷)
print(soup.a.name)   # 獲取a標簽的名字
print(soup.a.parent.name)   # a標簽的父標簽(上一級標簽)的名字
print(soup.a.parent.parent.name)  # a標簽的父標簽的父標簽的名字

輸出結果

  <title>This is a python demo page</title>
  <a class="py1" href="http://www.icourse163.org/course/BIT-268001" id="link1">Basic Python</a>
  a
  p
  body

 

 

print('a標簽類型是:', type(soup.a))   # 查看a標簽的類型
print('第一個a標簽的屬性是:', soup.a.attrs)  # 獲取a標簽的所有屬性(注意到格式是字典)
print('a標簽屬性的類型是:', type(soup.a.attrs))  # 查看a標簽屬性的類型
print('a標簽的class屬性是:', soup.a.attrs['class'])   # 因為是字典,通過字典的方式獲取a標簽的class屬性
print('a標簽的href屬性是:', soup.a.attrs['href'])   # 同樣,通過字典的方式獲取a標簽的href屬性

輸出結果

  a標簽類型是: <class 'bs4.element.Tag'>
  第一個a標簽的屬性是: {'href': 'http://www.icourse163.org/course/BIT-268001', 'class': ['py1'], 'id': 'link1'}
  a標簽屬性的類型是: <class 'dict'>
  a標簽的class屬性是: ['py1']
  a標簽的href屬性是: http://www.icourse163.org/course/BIT-268001

BeautifulSoup的提供了兩個超級好用的方法(可能是你用bs方法中最常用的)。借助這兩個函數,你可以通過表現的不同屬性輕松過濾HTML(XML)文件,查找需要的標簽組或單個標簽。

find()找到第一個滿足條件的標簽就返回,不在繼續往下尋找。

findAll()找到所有滿足條件的標簽以列表形返回。

print(soup.find('a'))#找尋a標簽第一次出現的位置

結果
<a class="py1" href="http://www.icourse163.org/course/BIT-268001" id="link1">Basic Python</a>

  

常用通過find_all()方法來查找標簽元素:<>.find_all(nameattrsrecursivestring**kwargs) ,返回一個列表類型,存儲查找的結果 

• name:對標簽名稱的檢索字符串
• attrs對標簽屬性值的檢索字符串,可標注屬性檢索
• recursive是否對子孫全部檢索,默認True
• string:<>…</>中字符串區域的檢索字符串 

 for i in soup.find_all('a'):
  print('標簽名稱:', i)

結果為

標簽名稱: <a class="py1" href="http://www.icourse163.org/course/BIT-268001" id="link1">Basic Python</a>
標簽名稱: <a class="py2" href="http://www.icourse163.org/course/BIT-1001870001" id="link2">Advanced Python</a>

 

 for i in soup.find_all('a',{'class':{'py1'}}): #找尋a標簽當中class為py1的html標簽
  print(i)

結果為

標簽名稱: <a class="py1" href="http://www.icourse163.org/course/BIT-268001" id="link1">Basic Python</a>

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM