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


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM