強烈建議:請在電腦的陪同下, 閱讀本文。 本文以實戰為主, 閱讀過程如稍有不適, 還望多加練習。
如有侵權請聯繫小編刪除!
在流覽器的地址欄輸入URL地址, 在網頁處按右鍵, 找到檢查, 如下圖所示:(不同流覽器的叫法不同, Chrome流覽器叫做檢查, Firefox流覽器叫做查看元素, 但是功能都是相同的)小編推薦大家加一下這個群:330637182 這個群裡好幾千人了!大家遇到啥問題都會在裡面交流!而且免費分享零基礎入門料資料web開發 爬蟲資料一整套!是個非常好的學習交流地方!也有程式師大神給大家熱心解答各種問題!很快滿員了。 欲進從速哦!各種PDF等你來下載!全部都是免費的哦!所以小編在群裡等你們過來一起交流學習呢!
我們可以看到, 右側出現了一大推代碼, 這些代碼就叫做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張好了。
按照我們的設想,我們應該能找到很多標籤。但是我們發現,除了一些
- 標籤,它們是什麼關係啊?顯然,兄弟姐妹嘍!我們稱它們為兄弟結點。
看到這裡可能有人會問,這有好多
- 標籤,它的子節點是標籤,它的父節點是
- 標籤就是
- 標籤又包含