您的位置:首頁>正文

剛學的小白通過一小時就學會了Python3的網路爬蟲!只因有這篇!

一、前言

強烈建議:請在電腦的陪同下, 閱讀本文。 本文以實戰為主, 閱讀過程如稍有不適, 還望多加練習。

如有侵權請聯繫小編刪除!

1. 審查元素

在流覽器的地址欄輸入URL地址, 在網頁處按右鍵, 找到檢查, 如下圖所示:(不同流覽器的叫法不同, Chrome流覽器叫做檢查, Firefox流覽器叫做查看元素, 但是功能都是相同的)小編推薦大家加一下這個群:330637182 這個群裡好幾千人了!大家遇到啥問題都會在裡面交流!而且免費分享零基礎入門料資料web開發 爬蟲資料一整套!是個非常好的學習交流地方!也有程式師大神給大家熱心解答各種問題!很快滿員了。 欲進從速哦!各種PDF等你來下載!全部都是免費的哦!所以小編在群裡等你們過來一起交流學習呢!

我們可以看到, 右側出現了一大推代碼, 這些代碼就叫做HTML。 什麼是HTML?舉個容易理解的例子:我們的基因決定了我們的原始容貌, 伺服器返回的HTML決定了網站的原始容貌。

我能有這麼多錢嗎?顯然不可能。 我是怎麼給網站"整容"的呢?就是通過修改伺服器返回的HTML資訊。

我們每個人都是"整容大師", 可以修改頁面資訊。 我們在頁面的哪個位置點擊審查元素, 流覽器就會為我們定位到相應的HTML位置, 進而就可以在本地更改HTML資訊。

再舉個小例子:我們都知道, 使用流覽器"記住密碼"的功能, 密碼會變成一堆小黑點, 是不可見的。 可以讓密碼顯示出來嗎?可以, 只需給頁面"動個小手術"!以淘寶為例, 在輸入密碼框處右鍵, 點擊檢查。

就這樣, 流覽器"記住的密碼"顯現出來了:

使用pip和easy_install都可以安裝,二選一即可。

(2)簡單實例

安裝好requests庫之後,我們先來大體流覽一下requests庫的基礎方法:

官方中文教程地址:http://docs.python-requests.org/zh_CN/latest/user/quickstart.html

requests庫的開發者為我們提供了詳細的中文教程,查詢起來很方便。本文不會對其所有內容進行講解,摘取其部分使用到的內容,進行實戰說明。

首先,讓我們看下requests.get()方法,它用於向伺服器發起GET請求,不瞭解GET請求沒有關係。我們可以這樣理解:get的中文意思是得到、抓住,那這個requests.get()方法就是從伺服器得到、抓住資料,也就是獲取資料。讓我們看一個例子(以 www.gitbook.cn 為例)來加深理解:

左側是我們程式獲得的結果,右側是我們在www.gitbook.cn 網站審查元素獲得的資訊。我們可以看到,我們已經順利獲得了該網頁的HTML資訊。這就是一個最簡單的爬蟲實例,可能你會問,我只是爬取了這個網頁的HTML資訊,有什麼用呢?客官稍安勿躁,接下來進入我們的實戰正文。

三、爬蟲實戰

實戰內容由簡單到複雜,難度逐漸增加,但均屬於入門級難度。下面開始我們的第一個實戰內容:網路小說下載。

1. 小說下載

(1)實戰背景

運行代碼,可以看到如下結果:

同理,我會根據實戰需求,講解Beautiful Soup庫的部分使用方法,更詳細的內容,請查看官方文檔。

現在,我們使用已經掌握的審查元素方法,查看一下我們的目標頁面,你會看到如下內容:

知道這個資訊,我們就可以使用Beautiful Soup提取我們想要的內容了,編寫代碼如下:

這樣對應的看一下,是不是就懂了?可能有人會問了,為什麼不是find_all('div', id = 'content', class_ = 'showtxt')?這樣其實也是可以的,屬性是作為查詢時候的約束條件,添加一個class_='showtxt'條件,我們就已經能夠準確匹配到我們想要的標籤了,所以我們就不必再添加id這個屬性了。運行代碼查看我們匹配的結果:

程式運行結果如下:

通過審查元素,我們發現可以發現,這些章節都存放在了class屬性為listmain的div標籤下,選取部分html代碼如下:

在分析之前,讓我們先介紹一個概念:父節點、子節點、孫節點。

限定了
標籤的開始和結束的位置,他們是成對出現的,有開始位置,就有結束位置。我們可以看到,在
標籤包含
標籤,那這個
標籤就是
標籤的子節點,
標籤又包含
標籤和
標籤,那麼
標籤和
標籤就是
標籤的孫節點。有點繞?那你記住這句話:誰包含誰,誰就是誰兒子!

他們之間的關係都是相對的。比如對於

標籤,它的子節點是標籤,它的父節點是
標籤。這跟我們人是一樣的,上有老下有小。

看到這裡可能有人會問,這有好多

標籤和標籤啊!不同的
標籤,它們是什麼關係啊?顯然,兄弟姐妹嘍!我們稱它們為兄弟結點。

好了,概念明確清楚,接下來,讓我們分析一下問題。我們看到每個章節的名字存放在了標籤裡面。標籤還有一個href屬性。這裡就不得不提一下標籤的定義了, 標籤定義了一個超連結,用於從一張頁面連結到另一張頁面。 標籤最重要的屬性是 href 屬性,它指示連結的目標。

我們將之前獲得的第一章節的URL和 標籤對比看一下:

還是使用find_all方法,運行結果如下:

因為find_all返回的是一個列表,裡邊存放了很多的標籤,所以使用for迴圈遍歷每個標籤並列印出來,運行結果如下。

最上面匹配的一千多章的內容是最新更新的12章節的連結。這12章內容會和下面的重複,所以我們要濾除,除此之外,還有那3個外傳,我們也不想要。這些都簡單地剔除就好。

(3)整合代碼

每個章節的連結、章節名、章節內容都有了。接下來就是整合代碼,將獲得內容寫入文字檔存儲就好了。編寫代碼如下:

很簡單的程式,單進程跑,沒有開進程池。下載速度略慢,喝杯茶休息休息吧。代碼運行效果如下圖所示:

看一看這些優美的壁紙,這個網站的名字叫做Unsplash,免費高清壁紙分享網是一個堅持每天分享高清的攝影圖片的網站,每天更新一張高品質的圖片素材,全是生活中的景象作品,清新的生活氣息圖片可以作為桌面壁紙也可以應用於各種需要的環境。

看到這麼優美的圖片,我的第一反應就是想收藏一些,作為知乎文章的題圖再好不過了。每張圖片我都很喜歡,批量下載吧,不多爬,就下載50張好了。

按照我們的設想,我們應該能找到很多標籤。但是我們發現,除了一些

©2016 華文網. All Rights Reserved. 版權&隱私條款 | 聯繫我們 | 網站地圖
免責聲明:本網站是以實時上傳文章的方式運作,本站對所有文章的真實性、完整性及立場等,不負任何法律責任。而一切文章內容只代表發文者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。發文者擁有在本站張貼的文章。由於本站是受到「實時發表」運作方式所規限,故不能完全監查所有即時文章,若讀者發現有留言出現問題,請聯絡我們。本站有權刪除任何內容及拒絕任何人士發文,同時亦有不刪除文章的權力。切勿撰寫粗言穢語、毀謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。
喜欢就按个赞吧!!!
点击关闭提示