很多讀者在學(xué)習(xí)了 Python 之后都想做一些爬蟲程序,,去網(wǎng)上采集數(shù)據(jù)或完成一些自動化操作,。因此,,我們也制作了一套爬蟲實戰(zhàn)課程,目前正在最后的完善中,,很快將和各位見面,。 等不及的朋友,可以先來看看這個類似于 bs4 的網(wǎng)頁分析模塊——PyQuery,。 如果說到 jQuery,,熟悉前端的同學(xué)肯定不陌生,它可以簡單優(yōu)雅地對 html 文件進(jìn)行定位,、選擇,、移動等操作。而本文的主角 pyquery,,支持以 jquery 的方式對 html 進(jìn)行操作,。因此非常適合有前端或 js 基礎(chǔ)的同學(xué)使用。 廢話不多說,,一邊看文章,,一邊打開編輯器,跟著我一探究竟吧,。 1,、安裝安裝過程比較簡單 pip install pyquery 2、入門使用接下來,,我們以分析簡書首頁文章為例,,簡單梳理 pyquery 的部分函數(shù) 。 2.1 導(dǎo)入相關(guān)的庫分別導(dǎo)入 網(wǎng)絡(luò)請求庫 requests、以及 pyquery ,。 import requests 2.2 向 pyquery 導(dǎo)入數(shù)據(jù)與 bs4 一樣,,處理網(wǎng)頁首先建立一個 pyquery 對象。通過抓取到的網(wǎng)頁內(nèi)容初始化即可,。 # 請求簡書地址 pyquery 也可以直接調(diào)用內(nèi)置的網(wǎng)絡(luò)請求模塊,,從網(wǎng)址初始化: url = 'http://www.baidu.com' 2.3 定位元素pyquery 提供多種定位元素的方法,這里簡單介紹三種,,直接定位,、根據(jù) 根據(jù) html 標(biāo)簽直接定位: # 直接定位 head 標(biāo)簽 以上代碼就是獲取 html 中 根據(jù) id 定位: 在簡書首頁源代碼中可找到這么一段 根據(jù) id 定位找到這個 # 定位 id = note-11772642 的 li 標(biāo)簽 以上代碼獲取 根據(jù) class 定位: 同樣以剛才的為例 我們根據(jù) # 定位 class = have-img 的 li 標(biāo)簽 注意的是查詢 2.3 索引標(biāo)簽在上一節(jié)的最后有個小問題,我們知道 首先我們可以逐個遍歷 # 遍歷所有 class = have-img 的 li 標(biāo)簽 我們可以索引某一個 使用 # 獲取第一個 li 標(biāo)簽 2.4 尋找標(biāo)簽同樣回到剛剛的那張圖 在上一步,,我們已經(jīng)找到了所有的 這時候 li_spec = pq_class.filter('#note-11772642') 這樣我們就找到了指定的這個 當(dāng)然,,針對這種情況,, pyquery 為我們提供了另外一個函數(shù) p_tag = li_spec.find('p') 2.5 提取屬性與值以上我們講了許多關(guān)于標(biāo)簽的知識,,現(xiàn)在來談?wù)勗趺传@取標(biāo)簽內(nèi)的屬性和標(biāo)簽包裹的文本,實際的爬蟲項目中,,通常這是最重要的一步,,比如從 獲取屬性: 使用 # 獲取 id 屬性的方法 獲取文本: 使用 string = p_tag.text() 到此,,在爬蟲中會使用到的函數(shù)就是這些了。 3,、小結(jié)pyquery 還擁有操作文檔樹的能力,,本篇文章著重介紹與爬蟲相關(guān)的知識,所以就不再此詳細(xì)敘述了,,有興趣的同學(xué)移步官方文檔: 最后,,既然我們都分析了簡書首頁,請大家根據(jù)所學(xué)內(nèi)容爬取簡書首頁所有的文章標(biāo)題和文章鏈接,,然后打印出來吧,,像下圖一樣 |
|