777
Python
Python爬蟲之urllib模塊2
--------------------------------------------------------------------------------------------------------------------------------
本文來自網友投稿
作者:PG,一個待畢業待就業的二流大學生。
-------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------
看了一下上一節的反饋,有些同學認為這個沒什麼意義,也有的同學覺得太簡單,關於BeautifulSoup和lxml在後續的教程都會有。這裏我記錄的是我學習和思考的一個過程,我不是編程高手,非常感謝玄魂老師能給我這個機會,在公眾號發布這種入門文章。
——作者 PG
-----------------------------------------------------------------------------------------------------
上一課我們成功的下載了頁麵的第一篇文章,這一課我們的目標是怎麼把第一頁的所有文章都下載下來。還是先繼續我們上一節課的內容。我們這次爬取的網頁還是https://tuilixue.com/zhentantuilizhishi/list_4_1.html
上一次課我們說了怎麼去獲取第一條的文章鏈接,現在我們再來爬取本頁後麵剩下的鏈接。我們先來看看上次我們爬取鏈接用的代碼。
獲取後麵的鏈接我們能不能如法炮製呢,我們先來試試。我們把代碼寫成下麵那樣
然後我們現在來試試
結果我們發現我們試圖獲取的三條鏈接都是一樣的,可以看出,這還是本頁的第一篇文章的鏈接。證明我們這種方法是不可行的。我們回想一下上一節課我們講的定位鏈接使用函數
就是這個find函數,我們看看幫助,我們發現了我們可以自定義開始尋找的下標和尋找結束的下標。我們從html裏麵發現我們想要爬取的鏈接相隔都不是很遠,都處在同一個div下麵。於是我們來試試,從第一條鏈接後麵開始尋找第二條鏈接。
這裏我們要注意後麵兩條代碼,我們選擇了開始的下標是從上一條鏈接的尾部開始的。現在我們來試試是否可以獲取正確的鏈接。
現在我們獲取到了三條不同的鏈接,我們再通過對比html來看看我是否獲取的是正確的鏈接。
從結果來看,我們的代碼成功的獲取了本頁的前幾篇文章的鏈接。關於怎麼獲取剩下的鏈接我們應該有頭緒了。當然,這裏一頁隻有10篇文章,也就是隻有10個鏈接,我們可以把我們的獲取鏈接的代碼複製10次,可是如果一頁有20篇,30篇,50甚至是100篇呢,難道我們也要將代碼複製那麼多的次數,肯定不能,也不科學。很多同學現在已經知道要用循環來做了,但是這個要怎麼循環,從哪裏循環呢?我們再來看看我們上麵的代碼,我們發現除了第一條鏈接獲取的代碼不一樣,後麵兩條鏈接獲取的代碼都是一樣的,這時我們就知道我們應該從第二條鏈接獲取代碼進行循環了。
這裏我們要先定義一個列表對獲取的鏈接進行存儲,因為是10篇文章,所以這裏定義的就是一個10個元素的空的字符串列表。下麵是我們循環的代碼塊。
這裏結束一下我們為什麼不是從開始進行賦值,大家注意到沒有,我們是從第二條文章鏈接看是循環的,那麼第一條的文章鏈接在哪呢?當然是存儲在了列表的第一個位置,也就是下標為的那個位置了,關於range後麵的範圍,大家知道是包下不包上的就行了,就是說在range(x,y)的循環中,循環是從x開始,到y-1結束的,不包括y本身。我們現在來運行一下我們的代碼看看是否獲取的是正確的鏈接。
然後再次對比html
這時我們發現我們獲取了鏈接是正確的,那麼我們就要開始進行下載了。還是上一節課的代碼,不過我們進行修改一些地方。因為上次隻是單個鏈接,這次我們有一個鏈接列表,所以我們應該采取循環進行下載。我們要對下載重新寫一個循環了。
我們現在來試試,這是上一節課我們成功下載的第一篇文章
我們現在刪掉他。
現在我們看到文件夾裏麵是什麼都沒有的,我們現在開始下載。
我們這就下載完了,我打開其中一個看看。還是注意地址欄上麵的鏈接。
可以看出我們獲取的文章是正確的。因為篇幅有限,我就不一個一個去打開截圖了,大家自己可以根據自己實際環境敲一下代碼。
類似的功能有很多值得改進的點,大家可以發表自己的觀點,進行討論。
-------------------------------------------------------------------------------
未完,待續。
請持續關注微信訂閱號:玄魂工作室(xuanhun521)
最後更新:2017-10-08 18:24:50