# -*- coding:utf-8 -*- from bs4 import BeautifulSoup import codecs # BeautifulSoup 是python支持第三方的解析包,用於解析HTML網頁,提取信息 # lxml 第三方的解析包,解析html 速度比較快,功能強大 ,底層是c語言實現 ######## 1 html 源代碼 2 解析器 lxml # bs 根節點對象 bs = BeautifulSoup(codecs.open("index.html", "r", encoding="utf-8"), 'lxml') #bs 是BeautifulSoup 類型對象 print(type(bs.prettify())) print(type(bs)) print(bs.head) # 類型是Tag bs4.element.Tag子節點 print(type(bs.head)) #name 字節的名稱,bs.name獲取獲得是【document】文件 # 對於a\p\div 等標籤來數,獲取的就是標籤的名稱 print(bs.name) print(bs.title.name) # 字符串 print(type(bs.title.name)) # # attrs獲取標籤節點的屬性。返回的是一個key:values的字典,若是屬性有多個值返回的是列表 print(bs.a.attrs) # #獲取某一個屬性值 print(bs.a['href']) print(bs.a["class"]) # #<class 'bs4.element.NavigableString'> 類型 節點之間的text文本 print(bs.a.string) print(type(bs.a.string)) # # # bs4 使將html代碼轉換爲一個python對象(BeautifulSoup) # # Tag : 指的就是html 中的一個標籤(包含開始標籤和結束標籤在內的整個標籤),name。attrs, # # string # # NavigableString :指的是標籤中的文本,不包含標籤 print(bs.head.contents) # content 獲取直接子節點,返回一個列表 print(bs.body.contents) # 根據索引從全部節點中取出某一個 title = bs.head.contents[3] print(title) print(title.string) # children 返回的是列表生成器 res = bs.body.children for ele in res: print("*****") print(ele) #descendants 獲取子孫節點(包含子節點,子節點的子節點,每一個節點的內容),返回的 結果是一個生成器對象 res = bs.body.descendants for ele in res: print("...") print(ele) # 獲取節點的父節點 print(bs.title.parent) # next_sibling 獲取節點的下一個兄弟節點 \n 是一個字節 print(bs.meta.next_sibling.next_sibling) # previous_sibling 獲取節點的上一個兄弟節點 print(bs.title.previous_sibling.previous_sibling) # # 搜索 文檔樹中的數據 res = bs.find_all("p") print(res) # # 能夠根據多個標籤名查找 es = bs.find_all(["p", "a"]) print(es) # find()函數查找惟一標籤 # find_all() #經過class類名查找。不能直接寫class 由於class是python關鍵字,使用class_代替 print(bs.find_all(class_="two")) # 2 經過css 選擇器 查找標籤,返回時一個列表,列表中存放是要查找的標籤 # # 表明是ID .表示class print(bs.select('#data')) print(bs.select('.two')) # 找到指定的標籤 print(bs.select('a[target="_blank"]')) # 找到某個標籤下的指定屬性值的標籤 print(".....") #.表示class print(bs.select('div .spider')) print(bs.select('div #data')) """ """
查找的網頁位置css
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>bs4測試網頁</title> <style> <!--css選擇器--> #web span{ color: red; } /*#id .class*/ /*p span 後代選擇器*/ /*p>span 直接子標籤*/ </style> </head> <body> <a href="http://www.baidu.com" id="top" class="one two three" target="_blank">百度一下</a> <p class="spider">qwertyui</p> <div> <p class="spider">Python爬蟲工程師</p> <p id="web">Python後臺工程<span>123456</span></p> <p id="data" class="two">數據分析工程師</p> </div> <a href="#" target="_blank">123</a> <a href="#">456</a> </body> </html>