@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>
下面,我需要拿到文章分類的標籤。
<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 選擇器
<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
代碼如下
<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/