基於BeautifulSoup庫的HTML內容的查找
阿新 • • 發佈:2019-01-19
int request tag color false ali 子節點 app nts
一、BeautifulSoup庫提供了一個檢索的參數:
<>.find_all(name,attrs,recursive,string,**kwargs),它返回一個列表類型,存儲查找的結果。它的一些對應的簡寫形式是:
<tag>(...) <=> <tag>.find_all(...)
soup.(...) <=> soup.find_all(...)
?name:按照標簽名稱進行檢索,可以同時對多個標簽名稱同時檢索
?attr:按照標簽的屬性值進行檢索,可以標註為屬性檢索
?recursive:是否對子孫全部檢索,默認為True
?string:對標簽中字符串區域進行檢索,<>...string...</>
1 import requests 2 from bs4 import BeautifulSoup 3 import re 4 5 r = requests.get(‘http://python123.io/ws/demo.html‘) 6 r.raise_for_status() 7 r.encoding = r.apparent_encoding 8 demo = r.text 9 soup = BeautifulSoup(demo,"html.parser") 10 11print(soup.find_all(‘a‘))#按照name進行檢索 12 print(soup.find_all([‘a‘,‘b‘]))#同時對多個name標簽進行檢索 13 for tag in soup.find_all(re.compile(‘b‘)):#對以b開頭的所有標簽進行檢索 14 print(tag.name) 15 print(tag) 16 17 print("") 18 print(soup.find_all(‘p‘,‘course‘))#按照標簽裏面的屬性值進行檢索 19 print(soup.find_all(id=‘link1‘))#按照指定的屬性的屬性值進行檢索,嚴格匹配20 print(soup.find_all(id = re.compile(‘link‘)))#特定屬性值的不嚴格匹配 21 22 print("") 23 print(soup.find_all(‘a‘,recursive = False))#不對所有子孫檢索,只檢索兒子節點,起點是html標簽,如果返回的是空列表[],就代表a標簽是在兒子標簽之後的標簽裏面 24 25 print(soup.find_all(string = ‘Basic Python‘))#檢索字符串,嚴格匹配 26 print(soup.find_all(string = re.compile(‘Python‘)))#不嚴格匹配
二、<>find_all(..)的擴展方法
方法 | 說明 |
<>.find() | 搜索,只返回一個結果,字符串類型,同.find_all()參數 |
<>.find_parent() | 在先輩中搜索,只返回一個結果,返回字符串類型,同.find()參數 |
<>.find_parents() | 在先輩中搜索,返回列表類型,同.find_all()參數 |
<>.find_next_sibling() | 在後續平行節點中搜索,只返回一個結果,返回字符串類型,同.find()參數 |
<>.find_next_siblings() | 在後續平行節點中搜索,返回一個列表類型,同.find_all()參數 |
<>.find_previous_sibling() | 在前續平行節點中搜索,只返回一個結果,返回字符串類型,同參.find()數 |
<>.find_previous_siblings() | 在前續平行節點中搜索,返回一個列表類型,同.find_all()參數 |
基於BeautifulSoup庫的HTML內容的查找