Python爬蟲之『urlopen』


本文以爬取百度首頁為示例來學習,python版本為python3.6.7,完整代碼會在文章末附上

本次學習所用到的python框架:
urllib.request

本次學習所用到的函數: urllib.request.urlopen():發送http的get請求 .read():讀取抓到的內容 .decode(
"utf-8"):將獲取的betys格式數據轉換為string格式數據

 

1.發送http的get請求使用的函數urllib.request.urlopen() ,其返回內容是所請求的url的網頁源代碼 可以將返回的內容賦給另外一個key 

例如 response = urllib.request.urlopen(url)

代碼執行結果:

 好像是存在內存里,這應該展示的是一個內存地址。

 
 2.我們需要將內容讀出來就用到了有一個函數 .read()
 
data = response.read() `將response的內容讀出來賦值給data

 代碼執行結果:獲取的數據類型為bytes,沒有可讀性哈

 

3.需要進行轉換將data轉換成字符串類型,用到函數.decode("utf-8")

str_data = data.decode("utf-8")

 代碼執行結果:【ps:將上面的https改為http】不截圖了這里就能打印出url所對應的網頁源代碼了

 4.接下來是數據持久化的問題【固定格式記住就行了】

 代碼運行會生成一個baidu.html保存的是上面搜抓取的內容。

可以本地運行會[做運維的小年輕]打開一個瀏覽器頁面:
5.那我們在爬蟲的時候也會有需求,將字符串轉換為你bytes格式,這就需要用到函數 .encode

 代碼運行結果:

 
Python爬取到的數據類型一般有兩種:str 、bytes
如果是爬取回來的是bytes類型,但是需要寫入的是str類型用到的就是第4條的 .decode(utf-8)
如果爬取回來的是str類型,但是需要寫入的是bytes類型用到的就是第5條對的 .encode(utf-8)
 
 
完整代碼:
# -*- coding:utf-8 -*-
import  urllib.request

def load_data():
    url = "http://www.baidu.com/"

    #發送http的get請求的函數 urllib.request.urlopen() 其返回內容是所請求url的網頁源代碼
    #將返回的內容賦值給response
    response = urllib.request.urlopen(url)
    #print(response)
    #讀取內容 運行之后發現返回數據類型為bytes類型[做運維的小年輕]
    data = response.read()
    #print(data)
    # 將獲取的數據類型為bytes的數據data 轉換成字符串類型
    str_data = data.decode("utf-8")
    #print(str_data)
    #數據持久化,即寫入文件
    with open("baidu.html","w",encoding="utf-8")as f:
        f.write(str_data)
load_data()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM