爬蟲解析利器 PyQuery 的使用

@Author: Runsen

每個網頁,都有一定的特殊結構和層級關係,而且很多節點都有 id 或 class 作為區分,我們可以藉助它們的結構和屬性來提取信息。

如果你用慣了xpath和bs4,學習Pyquery是一個不錯的選擇。

pyquery 是 Python 的第三方庫,我們可以藉助於 pip3 來安裝,安裝命令如下:

<code>pip install pyquery
/<code>

下面,我以CSDN首頁為例。

<code>import requests
from pyquery import PyQuery as pq
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"
}
res = requests.get("https://www.csdn.net/",headers = headers)
res.encoding = 'utf-8'
doc = pq(res.text)
print(doc("title"))
print(doc("title").text())
/<code>

輸出如下

<code>
CSDN-專業IT技術社區
    
CSDN-專業IT技術社區
/<code>

下面,我需要拿到文章分類的標籤。

爬蟲解析利器 PyQuery 的使用

<code>print(doc(".nav_com ul li").text())
/<code>

輸出如下

<code>推薦 動態 程序人生 Python Java 百萬人學AI 前端 架構 區塊鏈 數據庫 5G 遊戲開發 移動開發 運維 安全 雲計算/大數據 研發管理 物聯網 計算機基礎 音視頻開發 其他
/<code>

在上面的例子中,我們初始化 pyquery 對象之後,傳入 CSS 選擇器 .nav_com ul li,它的意思是先選取 class 為 nav_com 的節點,然後再選取其內部 ul ,在選擇內部節點的li 節點,最後打印輸出。

下面,我們拿文章。查找子節點需要用到 find 方法,傳入的參數是 CSS 選擇器

爬蟲解析利器 PyQuery 的使用

<code>
for item in doc("#feedlist_id li").items():
    print(item.find(".title h2 a").text())
/<code>

輸出如下

<code>應聘3萬的職位,有必要這麼刁難我麼。。。沙雕。。。
薦 阿里面試,問了B+樹,這個回答讓我通過了
14個提高代碼質量的好問題
你好,我們可以認識一下嗎?
薦 面試了一個 31 歲程序員,讓我有所觸動,30歲以上的程序員該何去何從?
/<code>

因為每次訪問都是不一樣的推薦內容,所有輸出的文章標題不相同。

提取到節點之後,我們的最終目的當然是提取節點所包含的信息了。比較重要的信息有兩類,一是獲取屬性,二是獲取文本。

獲取文本就是text()方法,獲取屬性是attr方法,比如attr('href')

<code>for item in doc("#feedlist_id li").items():
    print(item.find(".list_con .title h2 a").attr('href'))
/<code>

輸出如下

<code>
https://blog.csdn.net/likun557/article/details/105608851
/<code>

下面,我用自己的博客來使用pyquery

爬蟲解析利器 PyQuery 的使用

代碼如下

<code>import requests
from pyquery import PyQuery as pq
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"
}
res = requests.get("https://blog.csdn.net/weixin_44510615",headers = headers)
res.encoding = 'utf-8'
doc = pq(res.text)
print(doc("title"))
print(doc("title").text())
for item in doc(".article-list div").items():
    print(item.find("h4 a").text(),item.find("h4 a").attr('href'))
/<code>

輸出如下

<code>記錄潤森奮鬥的點點滴滴_潤森_CSDN博客-從零學Python數據分析,零基礎學習Python的機器學習,零基礎學Python爬蟲領域博主
    
記錄潤森奮鬥的點點滴滴_潤森_CSDN博客-從零學Python數據分析,零基礎學習Python的機器學習,零基礎學Python爬蟲領域博主
原創 我的回憶錄 https://blog.csdn.net/weixin_44510615/article/details/103949794
原創 我 https://blog.csdn.net/weixin_44510615/article/details/90384881
原創 自我感觸 https://blog.csdn.net/weixin_44510615/article/details/90302069
原創 什麼是人工智能,還有如何學習人工智能,看我這篇的吹水文 https://blog.csdn.net/weixin_44510615/article/details/105620125
/<code>

對於PyQuery可以參考官方文檔:https://pyquery.readthedocs.io/en/latest/


分享到:


相關文章: