Python爬蟲之urllib模塊2


 

Python爬蟲之urllib模塊2

 本文來自網友投稿

作者:PG-55,一個待畢業待就業的二流大學生。                  

 

看了一下上一節的反饋,有些同學認為這個沒什么意義,也有的同學覺得太簡單,關於BeautifulSouplxml在后續的教程都會有。這里我記錄的是我學習和思考的一個過程,我不是編程高手,非常感謝玄魂老師能給我這個機會,在公眾號發布這種入門文章。

 

上一課我們成功的下載了頁面的第一篇文章,這一課我們的目標是怎么把第一頁的所有文章都下載下來。還是先繼續我們上一節課的內容。我們這次爬取的網頁還是http://tuilixue.com/zhentantuilizhishi/list_4_1.html

上一次課我們說了怎么去獲取第一條的文章鏈接,現在我們再來爬取本頁后面剩下的鏈接。我們先來看看上次我們爬取鏈接用的代碼。

獲取后面的鏈接我們能不能如法炮制呢,我們先來試試。我們把代碼寫成下面那樣

然后我們現在來試試

結果我們發現我們試圖獲取的三條鏈接都是一樣的,可以看出,這還是本頁的第一篇文章的鏈接。證明我們這種方法是不可行的。我們回想一下上一節課我們講的定位鏈接使用函數

就是這個find函數,我們看看幫助,我們發現了我們可以自定義開始尋找的下標和尋找結束的下標。我們從html里面發現我們想要爬取的鏈接相隔都不是很遠,都處在同一個div下面。於是我們來試試,從第一條鏈接后面開始尋找第二條鏈接。

這里我們要注意后面兩條代碼,我們選擇了開始的下標是從上一條鏈接的尾部開始的。現在我們來試試是否可以獲取正確的鏈接。

現在我們獲取到了三條不同的鏈接,我們再通過對比html來看看我是否獲取的是正確的鏈接。

從結果來看,我們的代碼成功的獲取了本頁的前幾篇文章的鏈接。關於怎么獲取剩下的鏈接我們應該有頭緒了。當然,這里一頁只有10篇文章,也就是只有10個鏈接,我們可以把我們的獲取鏈接的代碼復制10次,可是如果一頁有20篇,30篇,50甚至是100篇呢,難道我們也要將代碼復制那么多的次數,肯定不能,也不科學。很多同學現在已經知道要用循環來做了,但是這個要怎么循環,從哪里循環呢?我們再來看看我們上面的代碼,我們發現除了第一條鏈接獲取的代碼不一樣,后面兩條鏈接獲取的代碼都是一樣的,這時我們就知道我們應該從第二條鏈接獲取代碼進行循環了。

這里我們要先定義一個列表對獲取的鏈接進行存儲,因為是10篇文章,所以這里定義的就是一個10個元素的空的字符串列表。下面是我們循環的代碼塊。

這里結束一下我們為什么不是從0開始進行賦值,大家注意到沒有,我們是從第二條文章鏈接看是循環的,那么第一條的文章鏈接在哪呢?當然是存儲在了列表的第一個位置,也就是下標為0的那個位置了,關於range后面的范圍,大家知道是包下不包上的就行了,就是說在rangexy)的循環中,循環是從x開始,到y-1結束的,不包括y本身。我們現在來運行一下我們的代碼看看是否獲取的是正確的鏈接。

然后再次對比html

這時我們發現我們獲取了鏈接是正確的,那么我們就要開始進行下載了。還是上一節課的代碼,不過我們進行修改一些地方。因為上次只是單個鏈接,這次我們有一個鏈接列表,所以我們應該采取循環進行下載。我們要對下載重新寫一個循環了。

我們現在來試試,這是上一節課我們成功下載的第一篇文章

我們現在刪掉他。

現在我們看到文件夾里面是什么都沒有的,我們現在開始下載。

我們這就下載完了,我打開其中一個看看。還是注意地址欄上面的鏈接。

可以看出我們獲取的文章是正確的。因為篇幅有限,我就不一個一個去打開截圖了,大家自己可以根據自己實際環境敲一下代碼。

類似的功能有很多值得改進的點,大家可以發表自己的觀點,進行討論。

 

 

 

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com