本文以爬取百度首頁為示例來學習,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()