安裝: pip install pyquery
html = """ <html lang="en"> <head> 簡單好用的 <title>PyQuery</title> </head> <body> <ul id="container"> <li class="object-1">Python</li> <li class="object-2">大法</li> <li class="object-3">好</li> </ul> </body> </html> """
doc = pq(html) print(doc("title")) <title>PyQuery</title>
# PyQuery對象首先會請求這個url,用獲得的HTML內容完成初始化 doc = pq(url="https://www.cnblogs.com/songzhixue/") print(doc("title")) <title>村裏惟一的架構師 - 博客園</title> doc = pq(requests.get("https://www.cnblogs.com/songzhixue/").text) print(doc("title")) <title>村裏惟一的架構師 - 博客園</title> # 兩種方法相同
# 讀取本地的html文件以字符串的形式傳遞給PyQuery類來初始 化 doc = pq(filename="demo.html") # demo.html爲本地文件 print(doc("title"))
html = """ <html lang="en"> <head> 簡單好用的 <title>PyQuery</title> </head> <body> <ul id="container"> <li class="object-1">Python</li> <li class="object-2">大法</li> <li class="object-3">好</li> </ul> </body> </html> """
# 先選取id爲container的節點,在選取內部class屬性爲object-1的節點 doc = pq(html) print(doc("#container .object-1")) print(type(doc("#container .object-1"))) # 輸出類型仍是PyQuery類型 <li class="object-1">Python</li> <class 'pyquery.pyquery.PyQuery'>
html = """ <html lang="en"> <head> 簡單好用的 <title>PyQuery</title> </head> <body> <ul id="container"> <li class="object-1"> Python <span>你好</span> </li> <li class="object-2">大法</li> <li class="object-3">好</li> </ul> </body> </html> """
# 獲取全部子孫節點 doc = pq(html) a = doc("#container") lis = a.find("li") # 查詢的範圍是節點的全部子孫節點 print(lis) <li class="object-1"> Python <span>你好</span> </li> <li class="object-2">大法</li> <li class="object-3">好</li>
# 獲取全部子節點 doc = pq(html) a = doc("#container") li = a.children() print(li)
# 經過css選擇器選擇子節點中的某個節點 篩選出子節點中class屬性爲object-1的節點 doc = pq(html) a = doc("#container") li = a.children(".object-1") print(li) <li class="object-1"> Python <span>你好</span> </li>
# 這裏的父節點是該節點的直接父節點 doc = pq(html1) a= doc(".object-1") li = a.parent() print(li) <ul id="container"> <li class="object-1"> Python <span>你好</span> </li> <li class="object-2">大法</li> <li class="object-3">好</li> </ul>
# 獲取全部父節點,即祖先節點 doc = pq(html1) a = doc(".object-1") li = a.parents() print(li)
# 結果會有兩個,一個是父級節點一個是祖先節點
doc = pq(html1) a = doc(".object-1") li = a.parents("#container") print(li) <ul id="container"> <li class="object-1"> Python <span>你好</span> </li> <li class="object-2">大法</li> <li class="object-3">好</li> </ul>
# 獲取全部兄弟節點 doc = pq(html) a = doc(".object-1") li = a.siblings() print(li) <li class="object-2">大法</li> <li class="object-3">好</li>
# 經過css選擇器選擇兄弟節點中的某個節點 doc = pq(html) a = doc(".object-1") li = a.siblings(".object-3") print(li) <li class="object-3">好</li>
- 上面選擇節點的結果多是多個節點,也多是單個節點類型都是pyquery類型
doc = pq(html) a = doc(".object-1") li = a.siblings(".object-3") print(str(li)) print(type(str(li))) <li class="object-3">好</li> <class 'str'>
# 查詢結果爲多個節點須要遍從來獲取 # 多個節點須要調用items方法 doc = pq(html) a = doc("li").items() # 調用items會獲得一個生成器 print(a) for i in a: # 循環生成器取出每一個節點,類型也是pyquery print(i) <generator object PyQuery.items at 0x00000254B449CCA8> <li class="object-1"> Python <span>你好</span> </li> <li class="object-2">大法</li> <li class="object-3">好</li>
html = """ <html lang="en"> <head> 簡單好用的 <title>PyQuery</title> </head> <body> <ul id="container"> <li class="object-1"> Python <a href="www.taobao.com">world</a> <a href="www.baidu.com">hello</a> </li> <li class="object-2"> 大法 <a href="www.taobao.com">world</a> </li> <li class="object-3">好</li> </ul> </body> </html> """
# 找到某個節點後,就能夠調用attr()方法來獲取屬性 a = doc(".object-1") # print(a.find("a").attr("href")) # 當返回結果包含多個節點時,調用attr()方法只會獲得第一個節點的屬性 # 若是想要獲取全部a節點的屬性,須要使用遍歷 for i in a.find("a").items(): print(i.attr("href")) www.taobao.com www.baidu.com
1
2
3
4
|
-
調用text()方法獲取文本
-
當咱們獲得的結果是多個節點時
-
text() 能夠獲取到匹配標籤內的全部文本,返回的是全部文本內容組成的字符串
-
html() 返回的是匹配到的全部節點中的第一個節點內的html文本,若是想要獲取全部節點中的html須要遍歷
|
# 獲取純文本 doc = pq(html) li = doc("li") li = li.text() print(li)
Python world hello 大法 world 好
# 獲取節點內的HTML 帶標籤 只能獲取匹配到的第一個節點內的HTML doc = pq(html) li = doc("li") print(li.html()) Python <a href="www.taobao.com">world</a> <a href="www.baidu.com">hello</a>
# 遍歷獲取全部節點中的html doc = pq(html) li = doc("li") for i in li.items(): print(i.html()) Python <a href="www.taobao.com">world</a> <a href="www.baidu.com">hello</a> 大法 <a href="www.taobao.com">world</a> 好
html = """ <html lang="en"> <head> 簡單好用的 <title>PyQuery</title> </head> <body> <ul id="container"> <li class="object-1"> Python <a href="www.taobao.com">world</a> <a href="www.baidu.com">hello</a> </li> <li class="object-2"> 大法 <a href="www.taobao.com">world</a> </li> <li class="object-3">好</li> </ul> </body> </html> """
doc = pq(html) a = doc(".object-2") print(a) a.removeClass("object-2") # 刪除object-2這個class屬性 print(a) <li class="object-2"> 大法 <a href="www.taobao.com">world</a> </li> <li class=""> 大法 <a href="www.taobao.com">world</a> </li>
doc = pq(html) a = doc(".object-2") print(a) a.removeClass("object-2") # 刪除object-2這個class屬性 print(a) a.addClass("item") # 給該標籤添加一個item的class屬性 print(a) <li class="object-2"> 大法 <a href="www.taobao.com">world</a> </li> <li class=""> 大法 <a href="www.taobao.com">world</a> </li> <li class="item"> 大法 <a href="www.taobao.com">world</a> </li>
# 屬性操做 【一個參數是查找 兩個參數是設置屬性】 # 修改屬性 doc = pq(html) a = doc(".object-1") a.attr("name","henry") # 給li標籤添加一個name屬性,值爲henry print(a) <li class="object-1" name="henry"> Python <a href="www.taobao.com">world</a> <a href="www.baidu.com">hello</a> </li>
# 文本操做 【有參數是添加或修改文本內容 沒有參數是查找全部文本內容】 # 文本內容操做 doc = pq(html) a = doc(".object-1") a.text("hello world") print(a) <li class="object-1">hello world</li>
# 標籤操做 【有參數是添加或修改標籤 沒有參數是查找第一個標籤,獲取全部須要遍歷】 # 標籤操做 doc = pq(html) a = doc(".object-1") a.html("<span>span標籤</span>") print(a) <li class="object-1"><span>span標籤</span></li>
html = """ <div class="wrap"> <div id="container"> <ul class="list"> <li class="item-0">fist item</li> <li class="item-1"><a href="link1.html">second</a></li> <li class="item-0 active"><a href="link2.html"><span class="bold">third item</span></a></li> <li class="item-1 active"><a href="link3.html">fourth item</a></li> <li class="item-0"><a href="link4.html">fifth item</a></li> </ul> </div> </div> """
# 選擇第一個節點 doc = pq(html) a = doc("li:first-child") print(a) <li class="item-0">fist item</li>
# 選擇最後一個節點 doc = pq(html) a = doc("li:last-child") print(a) <li class="item-0"><a href="link4.html">fifth item</a></li>
# 選擇第2個li節點 doc = pq(html) a = doc("li:nth-child(2)") print(a) <li class="item-1"><a href="link1.html">second</a></li>
# 選擇第2個節點以後的全部節點 doc = pq(html) a = doc("li:gt(2)") print(a) <li class="item-1 active"><a href="link3.html">fourth item</a></li> <li class="item-0"><a href="link4.html">fifth item</a></li>
# 選擇偶數位值節點 doc = pq(html) a = doc("li:nth-child(2n)") print(a) <li class="item-1"><a href="link1.html">second</a></li> <li class="item-1 active"><a href="link3.html">fourth item</a></li>
# 包含second文本的節點 doc = pq(html) a = doc("li:contains(second)") print(a) <li class="item-1"><a href="link1.html">second</a></li>