Python爬蟲之urllib模組1

來源:互聯網
上載者:User

標籤:font-face   ogr   部分   tom   file   gb2312   編碼轉換   img   alt   

 

Python爬蟲之urllib模組1

 

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

 

 

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

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

 

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

很好,這裡沒有什麼限制

 

然後我們到我平時比較常去的板塊看看,http://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篇文章是我們需要爬取的,我們先從第一篇的連結開始。

 

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

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

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

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

我們再看到文本

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

Li不能作為我們的選擇了

a也不行

這個數量就比較接近了,我再看看前後文的規律發現/span><a似乎是符合我們的要求的

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

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

我們來對比一下我們的網頁上的第一個連結

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

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

從這裡看我們的檔案應該是下載成功了,我們去檔案路徑下面看看。

 

 

檔案下載是成功了,我們來開啟看看。這個地方要注意地址欄的連結

 

 

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

未完,待續。請持續關注 訂閱號:玄魂工作室(xuanhun521)

Python爬蟲之urllib模組1

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.