久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

【編程課堂】以 jQuery 之名 - 爬蟲利器 PyQuery

 編程教室 2021-03-18

很多讀者在學(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
import pyquery
2.2 向 pyquery 導(dǎo)入數(shù)據(jù)

與 bs4 一樣,,處理網(wǎng)頁首先建立一個 pyquery 對象。通過抓取到的網(wǎng)頁內(nèi)容初始化即可,。

# 請求簡書地址
url = 'http://www.jianshu.com/'
req = requests.get(url) page = req.text
# 導(dǎo)入 pyquery 處理
pq = pyquery.PyQuery(page)

pyquery 也可以直接調(diào)用內(nèi)置的網(wǎng)絡(luò)請求模塊,,從網(wǎng)址初始化:

url = 'http://www.baidu.com'
pq = pyquery.PyQuery(url=url)
2.3 定位元素

pyquery 提供多種定位元素的方法,這里簡單介紹三種,,直接定位,、根據(jù) id 定位 ,根據(jù) class 定位,。

根據(jù) html 標(biāo)簽直接定位:

# 直接定位 head 標(biāo)簽
pq_head = pq('head')

以上代碼就是獲取 html 中 < head>.......< /head> 標(biāo)簽內(nèi)的內(nèi)容,。

根據(jù) id 定位:

在簡書首頁源代碼中可找到這么一段

根據(jù) id 定位找到這個 li 標(biāo)簽,代碼如下:

# 定位 id = note-11772642 的 li 標(biāo)簽
pq_id = pq('#note-11772642')

以上代碼獲取 id 名為 note-11772642 的標(biāo)簽,,需要注意的是查詢 id  時添加 # 前綴,,這是 css 選擇器語法。

根據(jù) class 定位:

同樣以剛才的為例

我們根據(jù) class=have-img 去獲取這個 li 標(biāo)簽

# 定位 class = have-img 的 li 標(biāo)簽
pq_class = pq('.have-img')

注意的是查詢 class 時添加 . 前綴,,這也是 css 選擇器語法,。

2.3 索引標(biāo)簽

在上一節(jié)的最后有個小問題,我們知道 head 標(biāo)簽在 html 中只有一個,,而 class 名為 have-img 的 li 標(biāo)簽可能有多個,,我們該
如何遍歷所有的 li 標(biāo)簽?zāi)兀?又該如何單獨的取某一個 li 呢?

首先我們可以逐個遍歷

# 遍歷所有 class = have-img 的 li 標(biāo)簽
for li in pq_class:    
   # 獲取每一個 li 標(biāo)簽    pq_li = pq(li)

我們可以索引某一個 li 標(biāo)簽

使用.ep(index) 函數(shù),。

# 獲取第一個 li 標(biāo)簽
li_first = pq_class.ep(0)
# 獲取第二個 li 標(biāo)簽
li_second = pq_class.ep(1)
2.4  尋找標(biāo)簽

同樣回到剛剛的那張圖

在上一步,,我們已經(jīng)找到了所有的 li 標(biāo)簽,也知道如何取索引其中的元素,,但我們現(xiàn)在要準(zhǔn)確定位到某一個元素,,比如上圖中 id = note-11772642 這個 li 標(biāo)簽。

這時候 filter(selecter)  就派上了用場

li_spec = pq_class.filter('#note-11772642')

這樣我們就找到了指定的這個 li 標(biāo)簽,,需要注意的是,, filter 函數(shù)只能在同一級標(biāo)簽中尋找,比如在這里只能過濾 li 標(biāo)簽,,而不能定位 li 標(biāo)簽下的 a 標(biāo)簽,、 div 標(biāo)簽等。

當(dāng)然,,針對這種情況,, pyquery 為我們提供了另外一個函數(shù) find(selector),該函數(shù)用于尋找子節(jié)點,,繼續(xù)以上圖為例,,尋找該特定 li 標(biāo)簽下的 p 標(biāo)簽

p_tag = li_spec.find('p')
2.5  提取屬性與值

以上我們講了許多關(guān)于標(biāo)簽的知識,,現(xiàn)在來談?wù)勗趺传@取標(biāo)簽內(nèi)的屬性和標(biāo)簽包裹的文本,實際的爬蟲項目中,,通常這是最重要的一步,,比如從 a 標(biāo)簽中獲取鏈接、從 li 標(biāo)簽或者 p標(biāo)簽中獲取文本,。

獲取屬性:

使用 attr() 函數(shù),,以我們之前獲取的 li 標(biāo)簽為例,獲取其中的 id 屬性

# 獲取 id 屬性的方法
li_spec_id = li_spec.attr('id') li_spec_id_2 = li_spec.attr.id li_spec_id_3 = li_spec.attr['id']

獲取文本:

使用 text()函數(shù),, 以我們之前得到的 p 標(biāo)簽為例,,獲取其中的文本,。

string = p_tag.text()

到此,,在爬蟲中會使用到的函數(shù)就是這些了。

3,、小結(jié)

pyquery 還擁有操作文檔樹的能力,,本篇文章著重介紹與爬蟲相關(guān)的知識,所以就不再此詳細(xì)敘述了,,有興趣的同學(xué)移步官方文檔:
http:///pyquery/index.html

最后,,既然我們都分析了簡書首頁,請大家根據(jù)所學(xué)內(nèi)容爬取簡書首頁所有的文章標(biāo)題和文章鏈接,,然后打印出來吧,,像下圖一樣

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多