閱讀803 返回首頁    go Python


Python爬蟲之urllib模塊1

Python爬蟲之urllib模塊1

本文來自網友投稿。作者PG,一個待畢業待就業二流大學生。玄魂工作室未對該文章內容做任何改變。

因為本人一直對推理懸疑比較感興趣,所以這次爬取的網站也是平時看一些懸疑故事的網站,同時也是因為這個網站在編碼上麵和一些大網站的博客不同,並不那麼規範,所以對於初學者還是有一定的挑戰性的。我打算把這個爬蟲分三次講,所以每次都先完成一個小目標(當然不是一個億啦),這次課我們先爬取當前頁麵的並且下載第一篇文章。第二次課我們就將爬取當前頁麵的=所有的鏈接進行下載,第三次課我們將把整個板塊的文章都下載下來。

演示係統用的是kali,因為懶得去配置各種py模塊了,就利用係統已經配置好的,瀏覽器是firefox,使用的IDE是微軟的vscode

首先我們選取了我們要爬取的網站https://tuilixue.com/,先檢查一下robots.txt看看是否存在有一些反爬蟲的信息

很好,這裏沒有什麼限製

然後我們到我平時比較常去的板塊看看,https://tuilixue.com/zhentantuilizhishi/list_4_1.html我們現在想要爬取的文章就是這樣的

右擊鼠標查看源代碼,我們可以看到,我們想要爬取的鏈接就是這樣的

來一張清晰的

但是我們要怎麼辦才能使python得到這個網頁的源代碼呢

我們可以使用python的urllib模塊提供的open方法,首先我們先新建一個py文件,慣例

#-*-coding:utf8-*-

#!usr/bin/python

因為是linux係統,所以python路徑不同於windows,第一行代碼說明是用的uft-8進行編碼

在這裏我們要先導入urllib這個模塊,使用import導入

這裏其實是兩個方法,一個open一個read,open用於從網站上獲取網頁代碼,read是為了讀出來好打印

我們可以得到上麵結果,但是我們發現字符似乎成了亂碼,為了找到原因,我們再來看看源碼

我們似乎找到了原因,網頁使用的是gb2312進行編碼的,但是我們是使用utf-8的,所以導致的亂碼,對這方麵不解的同學可以去找一些編碼的知識看看。下麵我們用一個編碼轉換來嚐試獲取正確的編碼

大家這時可以看到,我們通過強製的編碼將獲取的網頁重新通過gb2312進行編碼,我們就可以看到正確的字符了,但是在我們的這次課中並不需要這樣的轉碼,這裏隻是為了顯示獲取的是正確的網頁,從圖中看到,我們獲取的正是我們需要進行爬取的頁麵。

下一步,我們需要獲取我們本頁的所有的文章鏈接了,這裏需要有一點html和css的知識,關於這部分的知識,大家自己去掌握就行了,不需要太深入。如圖中顯示的,href後麵的就是我們在本次課中需要爬取的鏈接,每頁都有10篇文章是我們需要爬取的,我們先從第一篇的鏈接開始。

這時候我們就要想我們應該怎麼樣去獲取到這個頁麵的鏈接了,如果正則表達式好的同學應該是想到了采取正則表達式進行獲取,但是這裏有一個問題,一個html頁麵中有如此多的a開頭的元素,也有如此多的href開頭的元素,想要通過正則去定位還是有點難的,就算定位出來,也是一大堆的代碼,這就不利於可讀性了。這時我們應該再從html文本中去分析。我們使用type函數進行類型的判斷。

通過對pageContent的類型分析,我們知道這是一個字符串類型

這樣我們就可以使用字符串中的find函數了,我們需要對find函數有一個了解

函數中說明了從字符串中尋找目標字符,返回找到的第一個下標,如果沒有找到就返回-1,同時可以設置開始尋找的位置和結束的位置。

我們再看到文本

我們發現是在div class=“liszw”下的li元素中的a元素中含有我們需要的鏈接,這時我們一個個來分析。

Li不能作為我們的選擇了

a也不行

這個數量就比較接近了,我再看看前後文的規律發現/span>

這時我們發現這和我們所要爬取的鏈接數量上是完全吻合的。我們就來試試。

這裏我們采取了一個切片操作,這時我們發現鏈接其實已經爬取到了,但是還是有些不完美,我們再來完善一下他。

我們來對比一下我們的網頁上的第一個鏈接

這樣我們就成功的爬取了第一個鏈接,現在我們來準備下載第一篇文章。從前麵我們可以知道,我們可以把網頁通過python的urllib模塊下載下來,那麼同樣的道理,我一樣也可以通過urllib模塊對文章進行下載。我們通過鏈接的最後一串數字對下載下來的文件進行命名。並在下載玩後打印end進行提示。

我們可以看到,路徑下是沒有文件的。現在我們開始下載。

從這裏看我們的文件應該是下載成功了,我們去文件路徑下麵看看。

文件下載是成功了,我們來打開看看。這個地方要注意地址欄的鏈接

這樣,我們第一篇的文章就下載成功了。

未完,待續。

請持續關注微信訂閱號:玄魂工作室(xuanhun521)

最後更新:2017-10-08 18:24:59

  上一篇:go python無線網絡安全入門案例翻譯
  下一篇:go Python爬蟲之urllib模塊2