day10 BS4

YuFu259發表於2024-06-07

re.findall("規則","待匹配字串",模式)
re.search / group//指定拿什麼資料
上一節補充:with open 伴隨開啟 as f 賦值聚鼎
s = f.read //所有字串列印出來賦值給s
re.S萬用字元能夠匹配包括換行符的一切
r"\d+" 原生字串解析所有的數字
re.search只第一個匹配條件的
re.findall匹配全部
ret.group提取匹配的資料 \ \透過標記的資料只提取某一項的內容
?p<名稱>//標記一定加在小括號前面
re.match 起始判斷的
re.split(r"\s+'',txt)\貪婪匹配全部的空格
print("12 34 56 88").replace("88","yuan")//88替換原則
全部提貨:ret = re.sub(r"\d+","yuan",s) 對應 :匹配的數字,替換,替換表
ret = re.sub(r"\d+","yuan",s,2) :指定次數

compile 提升效能,載入規則需要效能

reg = re.compile(r"\d+“)指定規則\相當於函式的呼叫
print(reg.findall(s1)))呼叫規則
前面加r表示不要解析規則,如果py先解析規則會引發報錯。r+之後把規則當初原生字串(轉譯字元)

BS4初識 全稱Beautiful Soup是python的一個庫//主要功能從網頁抓取資料 針對於html
是可以從HTML或XML檔案中提取資料的py庫
安裝:BS4和BS
先例項化物件:soup = BeautifulSoup(text)
print(soup.find_all("a"))//提取全部的a標籤
BeautifulSoup的物件(text,'html.parser')
print(soup.b)//列印b標籤的 格式是tag可提取的 只能找到第一個
地址概念:先找到大的在找中的然後小的,#print(soup.p.b.name)
#print (soup.a["href"])//提取超連結
#print(soup.p.text)和(soup.p.string)一個只提取文字

​ $\textcolor{GreenYellow}{print(soup.p.text)和(soup.p.string)一個只提取文字:}$

$\textcolor{Yellow}{顏色:Yellow}$
ret = soup.find_all("a")
d = {}
for tag in ret:
val = tag.text
h = tag.attrs.get("href")
print(val,h)
d[val] = h //以val為鍵以h為值
print(d)

print(soup.p.contents) 都是子節點
print(soup.p.children) //迭代器封裝
print(list(soup.p.children)) //強轉然後顯示內容

print(soup.a.next_sibing)//下一個兄弟,加幾個找到下下個兄弟
print(soup.a.previous_sibling)//找上一個標籤
$\textcolor{Yellow}{搜尋文件樹}$
find_all()方法 name引數
1.字串,即標籤名
ret = soup.find_all(name = "b")
print(ret)
2.正則
ret = soup.find_all(name=re.compile('^b')) //查詢b開頭的
3.列表
ret = soup.find_all(name=['a',"b"])
4.方法
按屬性過濾
ret = soup.find_all(class_="sister")

按文字過濾:
ret = soup.find_all(string=re.compile("匹配開頭詞"),limit=1)//這是加上正則,不加正則就沒有完整的,limt次數的限制

相關文章