1. 程式人生 > >爬蟲解析bs4 之(三) --- bs4模塊

爬蟲解析bs4 之(三) --- bs4模塊

爬蟲 open odi all 選擇 參數 node 沒有 att

bs4簡介

  • bs4是一個html的解析工具,根據html的特征和屬性來查找節點
1 from bs4 import BeautifulSoup
2 
3 fp = open("./test.html", "r", encoding="utf-8")
4 print(fp)
  • 初始化一個BeautifulSoup對象
1 soup = BeautifulSoup(fp, lxml)
2 # 參數1,是一個HTML字符串
3 # 參數2,代表一個解析器,因為bs4本身沒有解析器,可以借助於外界的解析器來解析
4 
5 print(soup)

  • 1、根據標簽來查找對象
1 print(soup.title)
2 print(soup.a)      # 如果標簽有多個,只提取第一個
  • 2、獲取標簽的屬性
1 a = soup.a
2 print(a.get("href"))   # 用get函數來獲取
3 print(a["href"])       # 用鍵值方式獲取
4 print(a.attrs)
  • 3、獲取內容
1 li = soup.li
2 print(li.string)      # 通過string屬性獲取,可以獲取當前標簽的字符串內容(包括註釋),但是如果當前內容中有子標簽則獲取為空
3 print(li.get_text()) #通過get_text函數獲取,獲取出當前節點的字符串和後代節點中所有的字符串並且拼接在一起,但是如果有註釋則忽略
  • 4、獲取後代節點
 1 body = soup.body
 2 
 3 # 1)獲取直接子節點
 4 children = body.children
 5 print(children)   3打印結果:<list_iterator object at 0x0000026E8ED16080>
 6 
 7 # 2)獲取後代節點
 8 des = body.descendants
 9 print
(des) # 打印結果:<generator object descendants at 0x00000203556CD048> 10 11 # 3)對節點進行遍歷 12 for node in des:
  • 5、用函數來查找
 1 # 1)find函數
 2 print(soup.find("a"))
 3 print(soup.find("li",class_=hehe))
 4 print(soup.find("li",id=hehe))
 5   
 6 # 2)find_all函數
 7 print(soup.find_all("a"))
 8   
 9 # 3) select函數,根據css選擇器來選取節點,返回值是一個列表
10 print(soup.select(".heihei"))
11 print(soup.select("#hehe"))
12 print(soup.select("[href=‘http://mi.com‘]"))
13 print(soup.select("[name=‘ok‘]"))
  1. 基礎選擇器:id選擇器,#id值。class選擇器,.class值。標簽選擇器,標簽名。通用選擇器,*。屬性選擇器 [某屬性=‘某值‘]
  2. 組合選擇器:選擇器1選擇器2...選擇器n (如果這些選擇器中有標簽要放在最前面)
  3. 派生選擇器:後代選擇器:選擇器1 選擇器2 ... 選擇器n
  4. 子選擇器: 選擇器1 > 選擇器2 > ... > 選擇器n

爬蟲解析bs4 之(三) --- bs4模塊