性夜影院午夜看片,无码精品久久一区二区三区,婷婷成人丁香五月综合激情,校园春色 qvod,性调教室高h学校

python網(wǎng)絡(luò)爬蟲教程 | 使用Python scrapy來進(jìn)行一次爬蟲實(shí)驗(yàn)吧!

這篇文章是一篇非常好的Python網(wǎng)絡(luò)爬蟲教程實(shí)戰(zhàn)項(xiàng)目。總的來說,爬蟲是Python能夠比較簡單實(shí)現(xiàn)的功能,適合新手練習(xí)的時(shí)候來用。

任務(wù)

抓取四川大學(xué)公共管理學(xué)院官網(wǎng)(http://ggglxy.scu.edu.cn)所有的新聞咨詢.

實(shí)驗(yàn)流程

1.確定抓取目標(biāo).
2.制定抓取規(guī)則.
3.'編寫/調(diào)試'抓取規(guī)則.
4.獲得抓取數(shù)據(jù)

1.確定抓取目標(biāo)

我們這次需要抓取的目標(biāo)為四川大學(xué)公共管理學(xué)院的所有新聞資訊.于是我們需要知道公管學(xué)院官網(wǎng)的布局結(jié)構(gòu).

python網(wǎng)絡(luò)爬蟲教程 | 使用Python scrapy來進(jìn)行一次爬蟲實(shí)驗(yàn)吧!

這里我們發(fā)現(xiàn)想要抓到全部的新聞信息,不能直接在官網(wǎng)首頁進(jìn)行抓取,需要點(diǎn)擊"more"進(jìn)入到新聞總欄目里面.

python網(wǎng)絡(luò)爬蟲教程 | 使用Python scrapy來進(jìn)行一次爬蟲實(shí)驗(yàn)吧!

我們看到了具體的新聞欄目,但是這顯然不滿足我們的抓取需求:?當(dāng)前新聞動(dòng)態(tài)網(wǎng)頁只能抓取新聞的時(shí)間,標(biāo)題和URL,但是并不能抓取新聞的內(nèi)容.所以我們想要需要進(jìn)入到新聞詳情頁抓取新聞的具體內(nèi)容.

2.制定抓取規(guī)則

通過第一部分的分析,我們會(huì)想到,如果我們要抓取一篇新聞的具體信息,需要從新聞動(dòng)態(tài)頁面點(diǎn)擊進(jìn)入新聞詳情頁抓取到新聞的具體內(nèi)容.我們點(diǎn)擊一篇新聞嘗試一下

python網(wǎng)絡(luò)爬蟲教程 | 使用Python scrapy來進(jìn)行一次爬蟲實(shí)驗(yàn)吧!

們發(fā)現(xiàn),我們能夠直接在新聞詳情頁面抓取到我們需要的數(shù)據(jù):標(biāo)題,時(shí)間,內(nèi)容.URL.

好,到現(xiàn)在我們清楚抓取一篇新聞的思路了.但是,如何抓取所有的新聞內(nèi)容呢?
這顯然難不到我們.

python網(wǎng)絡(luò)爬蟲教程 | 使用Python scrapy來進(jìn)行一次爬蟲實(shí)驗(yàn)吧!

我們在新聞欄目的最下方能夠看到頁面跳轉(zhuǎn)的按鈕.那么我們可以通過"下一頁"按鈕實(shí)現(xiàn)抓取所有的新聞.

那么整理一下思路,我們能夠想到一個(gè)顯而易見的抓取規(guī)則:
通過抓取'新聞欄目下'所有的新聞鏈接,并且進(jìn)入到新聞詳情鏈接里面抓取所有的新聞內(nèi)容.

3.'編寫/調(diào)試'抓取規(guī)則

為了讓調(diào)試爬蟲的粒度盡量的小,我將編寫和調(diào)試模塊糅合在一起進(jìn)行.
在爬蟲中,我將實(shí)現(xiàn)以下幾個(gè)功能點(diǎn):

1.爬出一頁新聞欄目下的所有新聞鏈接
2.通過爬到的一頁新聞鏈接進(jìn)入到新聞詳情爬取所需要數(shù)據(jù)(主要是新聞內(nèi)容)
3.通過循環(huán)爬取到所有的新聞.

分別對(duì)應(yīng)的知識(shí)點(diǎn)為:

1.爬出一個(gè)頁面下的基礎(chǔ)數(shù)據(jù).
2.通過爬到的數(shù)據(jù)進(jìn)行二次爬取.
3.通過循環(huán)對(duì)網(wǎng)頁進(jìn)行所有數(shù)據(jù)的爬取.

話不多說,現(xiàn)在開干.

3.1爬出一頁新聞欄目下的所有新聞鏈接

python網(wǎng)絡(luò)爬蟲教程 | 使用Python scrapy來進(jìn)行一次爬蟲實(shí)驗(yàn)吧!

通過對(duì)新聞欄目的源代碼分析,我們發(fā)現(xiàn)所抓數(shù)據(jù)的結(jié)構(gòu)為

python網(wǎng)絡(luò)爬蟲教程 | 使用Python scrapy來進(jìn)行一次爬蟲實(shí)驗(yàn)吧!

那么我們只需要將爬蟲的選擇器定位到(li:newsinfo_box_cf),再進(jìn)行for循環(huán)抓取即可.

編寫代碼

python網(wǎng)絡(luò)爬蟲教程 | 使用Python scrapy來進(jìn)行一次爬蟲實(shí)驗(yàn)吧!

測試,通過!

python網(wǎng)絡(luò)爬蟲教程 | 使用Python scrapy來進(jìn)行一次爬蟲實(shí)驗(yàn)吧!

3.2通過爬到的一頁新聞鏈接進(jìn)入到新聞詳情爬取所需要數(shù)據(jù)(主要是新聞內(nèi)容)

現(xiàn)在我獲得了一組URL,現(xiàn)在我需要進(jìn)入到每一個(gè)URL中抓取我所需要的標(biāo)題,時(shí)間和內(nèi)容,代碼實(shí)現(xiàn)也挺簡單,只需要在原有代碼抓到一個(gè)URL時(shí)進(jìn)入該URL并且抓取相應(yīng)的數(shù)據(jù)即可.所以,我只需要再寫一個(gè)進(jìn)入新聞詳情頁的抓取方法,并且使用scapy.request調(diào)用即可.

編寫代碼

python網(wǎng)絡(luò)爬蟲教程 | 使用Python scrapy來進(jìn)行一次爬蟲實(shí)驗(yàn)吧!

整合進(jìn)原有代碼后,有:

python網(wǎng)絡(luò)爬蟲教程 | 使用Python scrapy來進(jìn)行一次爬蟲實(shí)驗(yàn)吧!

測試,通過!

python網(wǎng)絡(luò)爬蟲教程 | 使用Python scrapy來進(jìn)行一次爬蟲實(shí)驗(yàn)吧!

這時(shí)我們加一個(gè)循環(huán):


python網(wǎng)絡(luò)爬蟲教程 | 使用Python scrapy來進(jìn)行一次爬蟲實(shí)驗(yàn)吧!

加入到原本代碼:

python網(wǎng)絡(luò)爬蟲教程 | 使用Python scrapy來進(jìn)行一次爬蟲實(shí)驗(yàn)吧!

測試:

python網(wǎng)絡(luò)爬蟲教程 | 使用Python scrapy來進(jìn)行一次爬蟲實(shí)驗(yàn)吧!

抓到的數(shù)量為191,但是我們看官網(wǎng)發(fā)現(xiàn)有193條新聞,少了兩條.
為啥呢?我們注意到log的error有兩條:
定位問題:原來發(fā)現(xiàn),學(xué)院的新聞欄目還有兩條隱藏的二級(jí)欄目:
比如:

python網(wǎng)絡(luò)爬蟲教程 | 使用Python scrapy來進(jìn)行一次爬蟲實(shí)驗(yàn)吧!

對(duì)應(yīng)的URL為

python網(wǎng)絡(luò)爬蟲教程 | 使用Python scrapy來進(jìn)行一次爬蟲實(shí)驗(yàn)吧!

URL都長的不一樣,難怪抓不到了!
那么我們還得為這兩條二級(jí)欄目的URL設(shè)定專門的規(guī)則,只需要加入判斷是否為二級(jí)欄目:

python網(wǎng)絡(luò)爬蟲教程 | 使用Python scrapy來進(jìn)行一次爬蟲實(shí)驗(yàn)吧!

組裝原函數(shù):

python網(wǎng)絡(luò)爬蟲教程 | 使用Python scrapy來進(jìn)行一次爬蟲實(shí)驗(yàn)吧!

測試:

python網(wǎng)絡(luò)爬蟲教程 | 使用Python scrapy來進(jìn)行一次爬蟲實(shí)驗(yàn)吧!

4.獲得抓取數(shù)據(jù)

python網(wǎng)絡(luò)爬蟲教程 | 使用Python scrapy來進(jìn)行一次爬蟲實(shí)驗(yàn)吧!

文章到這里就結(jié)束了,不知道大家對(duì)于Python網(wǎng)絡(luò)爬蟲教程有了一個(gè)什么樣的認(rèn)識(shí)呢?對(duì)你而言這個(gè)功能實(shí)用度又如何呢?

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國內(nèi)好評(píng)如潮的Linux云計(jì)算運(yùn)維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開發(fā)專業(yè)人才培訓(xùn)機(jī)構(gòu)!