1. 程式人生 > >python中pyquery庫的css選擇器實戰解析

python中pyquery庫的css選擇器實戰解析

lpad 意思 opened 獲取 .so Coding 追加 字符串轉換 default

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)
View Code

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"))
View Code

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")
View Code

python中pyquery庫的css選擇器實戰解析