1.pyquery部分選擇器解釋

"""pyquery的CSS選擇器方法""" from pyquery import PyQuery html = """ <div id="container"> <table class="tablelist" cellpadding="0" cellspacing="0"> <tr class="h"> <td class="l" width="374">職位名稱</td> <td>職位類別</td> <td>人數</td> <td>地點</td> <td>發布時間</td> </tr> </table> </div> """ # 傳遞html內容初始化 res = PyQuery(html) # CSS選擇器方法進行選擇。#container為ID選擇方法,.tablelist為class選擇方法,tr為標簽選擇方法 # 這句的意思是選擇ID為container節點內部的class為tablelist的節點中所有tr標簽內容 print(res("#container .tablelist tr")) # <class 'pyquery.pyquery.PyQuery'> 類型為PyQuery類型 print(type(res("#container .tablelist tr"))) """ # 常用CSS選擇器方法介紹 find() 查找結點的所有子孫節點 children() 查找子節點,也可以在括號中添加想要查找的子節點類型 parent() 獲取目標的父節點 parents() 獲取所有的祖先節點,可以在括號中添加css選擇器選取想要的祖先節點 siblings() 兄弟節點,選擇除本身之外的兄弟節點,可添加css選擇器 # 選擇完成之后會有許多節點,這需要遍歷 items() 返回一個生成器,使用for循環就可以打印出來。循環的每一個節點還是PyQuery類型可以繼續CSS選擇器選擇 # 獲取屬性和文本信息 attr() 獲取找到的第一個屬性,找多個需要循環遍歷 text() 獲取所有文本以空格分割開並合並成一個字符串 html() 獲取找到的第一個html文本,找多個需要循環遍歷 # 節點操作 addClass() 增加class屬性 removeClass() 移除class屬性 remove() 刪除find("xx").remove()找到的指定內容 attr() 增加節點屬性 text() 增加節點文本內容 html() 增加節點html內容 http://www.w3school.com.cn/css/index.asp # CSS教程 """ # 偽類選擇器 doc = PyQuery(html) # 第一個td節點 td = doc("td:first-child") print(td) # 最后一個td節點 td = doc("td:last-child") print(td) # 第二個td節點 td = doc("td:nth-child(2)") print(td) # 第三個td節點之后的td節點 td = doc("td:gt(2)") print(td) # 偶數位置的td節點 td = doc("td:nth-child(2n)") print(td) # 包含、地點、文本的td節點 td = doc("td:contains(地點)") print(td)
2.pyquery三種解析方法的選擇

"""CSS選擇器庫,熟悉web和jquery可以選擇此解析庫""" from pyquery import PyQuery import requests # 第一種解析方法,直接傳入url進行請求然后用得到的HTML內容進行初始化 res = PyQuery(url="https://www.sogou.com/") # css中的標簽選擇方法打印title標簽和內容 print(res("title")) # 第二種常規解析方法,用網頁的源代碼以字符串的形式傳遞給PyQuery類來初始化 rew = PyQuery(requests.get("https://www.sogou.com/").text) print(rew("title")) # 文件解析.可以選取一個本地HTML文件進行解析 req = PyQuery(filename="index.html") print(req("title"))
3.pyquery實戰解析之存儲到txt文件

"""pyquery實戰解析之數據存儲""" import requests from pyquery import PyQuery # 獲取url url = "https://www.gushiwen.org/default_1.aspx" # 獲取請求頭信息 headers={"user-agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3554.0 Safari/537.36"} # 發送get請求並獲取請求的文本字符串 html = requests.get(url=url, headers=headers).text # 將獲取的文本字符串轉換為PyQuery對象 pq = PyQuery(html) # 使用css選擇器並調用items()方法生成迭代器 items = pq(".cont").items() # 循環遍歷 for item in items: # 調用find()方法並采用css選擇器中的標簽選擇獲取標題。 title = item.find("p b").text() # 獲取結果類型為字符串,可以調用split()方法進行分割。分割之后為列表類型 contents = item.find("p a").text().split(" ") # 根據獲得的結果進行判斷 if len(contents) == 1: continue # 朝代 dynasty = contents[1] # 作者 author = contents[2] # 調用children()方法並采用css選擇器中的標簽選擇獲取文本內容 text = item.children(".contson").text() # f = open("poetry.txt", "a", encoding="utf-8") # f.write("\n".join([title, dynasty, author, text])) # f.write("\n" + "=" * 100 + "\n") # f.close() # 此種文件操作模式完成之后需要調用close()方法主動關閉文件 # 打開.txt文件,以"a"追加的方式寫入utf-8編碼的數據內容並給出可操作的文件句柄f with open("poetry.txt", "a", encoding="utf-8") as f: # with as 語法執行文件操作之后會自動關閉打開的文件,所以不用調用close()方法 f.write("\n".join([title, dynasty, author, text])) f.write("\n" + "=" * 100 + "\n")