4.1 urllib--通過URL開啟任意資源--2

來源:互聯網
上載者:User

標籤:date   url編碼   成功   根目錄   pow   有關   user   geturl   內容   

此時,我們已經成功實現了一個網頁的爬取,如何將獲得的網頁以網頁的形式儲存到本地呢?

思路如下:
1 首先爬取到一個網頁並將爬取到的內容讀取出來賦值給一個變數
2 以寫的方式開啟一個本地檔案,命名為*.html等網頁格式
3 將1 中變數的值寫入該檔案中。
4 關閉該檔案

所以我們剛才已經成功擷取到了百度首頁的內容並讀取賦給了變數data,接著可以通過
一下代碼實現將爬取到的網頁儲存到本地。

fhandle=open("E:/1.html","w")
fhandle.write(data)
fhandle.close()

執行完該操作後,即可以將對應檔案儲存在E盤中的根目錄中,我們首先通過open()函數
開啟了該檔案,並以"w"二進位寫入的方式開啟,開啟後將控制代碼賦給變數fhandle,然後
使用write()方法寫入了對應的資料data,接著在通過close()方法關閉該檔案,有始有終。

從根目錄中可以尋找到1.html檔案。
然後利用瀏覽器開啟這個檔案後,我們發覺進入了百度首頁的頁面,不過就是缺少圖片
,我也不知道為什麼就缺少圖片,

除了這種方法之外,在python中,還可以使用urllib.request裡面的urlretrieve()函數
直接將對應資訊寫入本地檔案,格式為:“urllib.request.urlretrieve(url,filename=本地檔案地址)”。
比如,我們可以直接使用該方式將網頁寫入本地檔案,輸入:

filename = urllib.request.urlretrieve("http://edu.51cto.com",filename="D:/2.html")

執行後,成功將“http://edu.51cto.com”儲存到了本地,開啟後若進入了首頁則爬取成功。

#記住,是在python3中執行。



如果希望返回與當前環境有關的資訊,我們可以使用info()返回,比如可以執行:
print file.info()

結果為:
Date: Fri, 01 Sep 2017 08:35:19 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: Close
Vary: Accept-Encoding
Set-Cookie: BAIDUID=24942564BED35EC70DF96034AB71D9A3:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BIDUPSID=24942564BED35EC70DF96034AB71D9A3; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: PSTM=1504254919; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BDSVRTM=0; path=/
Set-Cookie: BD_HOME=0; path=/
Set-Cookie: H_PS_PSSID=1439_21104_17001_20928; path=/; domain=.baidu.com
P3P: CP=" OTI DSP COR IVA OUR IND COM "
Cache-Control: private
Cxy_all: baidu+71a6cd1e799e7f19eaadfd7f1425610a
Expires: Fri, 01 Sep 2017 08:35:14 GMT
X-Powered-By: HPHP
Server: BWS/1.1
X-UA-Compatible: IE=Edge,chrome=1
BDPAGETYPE: 1
BDQID: 0xd8add75f0004af5a
BDUSERID: 0
可以看到,輸出了對應的info,調用格式則為:“爬取的網頁.info()”,我們之前爬取到的網頁賦給了變數file,所以此時通過file調用。


如果希望擷取當前爬取網頁的狀態代碼,我們可以使用getcode(),若返回200為正確,
返回其他則不正確,調用格式則為:“爬取的網頁.getcode()”。在該例中,我們可以執行:

print file.getcode()
200

可以看到,此時返回了狀態代碼200,說明此時響應正確。

如果想要擷取當前所爬取的URL地址,我們可以使用geturl()來實現,調用格式則為:“爬取的網頁.geturl()”,本例中,
可以通過如下代碼擷取:

print file.geturl()
http://www.baidu.com

可以看到,此時輸出了爬取的源網頁地址為‘http://www.baidu.com‘。

一般來說,URL標準中只會雲去一部分ASCII字元比如,數字、字母、部分符號等,而其他的
一些字元、比如漢字等,是不符合URL標準的。所以如果我們在URL中使用一些其他不符合
標準的字元就會出現問題,此時需要進行URL編碼方可解決。比如在URL中輸入中文問或者
":"或者"&"等不符合標準的字元時,需要編碼。

如果要進行編碼,我們可以使用urllib.quote()進行,比如,我們要對網址”http://www.sina.com.cn“
進行編碼,可以使用如下代碼:

print urllib.quote("http://www.sina.com.cn")

結果如下:
http%3A//www.sina.com.cn

那麼相應的,有編碼就有解碼,可以通過urllib.unquote()進行實現,就對我們剛才的編碼網址
進行解碼

print urllib.unquote("http%3A//www.sina.com.cn")
結果如下;
http://www.sina.com.cn

4.1 urllib--通過URL開啟任意資源--2

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.