1. 程式人生 > >Python3爬蟲(一)抓取網頁的html

Python3爬蟲(一)抓取網頁的html

因為程式碼只有幾行,所以可以先貼程式碼:

import  urllib.request
url = r'http://douban.com'
res = urllib.request.urlopen(url)
html = res.read().decode('utf-8')
print(html)

第一行,匯入 urllib庫的request模組

第二行,指定要抓取的網頁url,必須以http開頭的

第三行,呼叫 urlopen()從伺服器獲取網頁響應(respone),其返回的響應是一個例項

第四行,呼叫返回響應示例中的read()函式,即可以讀取html,但需要進行解碼,具體解碼寫什麼,要在你要爬取的網址右鍵,檢視原始碼,


紅框中的 charset= 則表示編碼格式,我要爬取的網頁編碼為 utf-8,所以,解碼我也填utf-8,如果是gbk2313,則填寫的是GBK

(更為簡單的方法是在程式中呼叫info()獲取網頁頭部來檢視編碼方式:)

檢視網頁的頭部資訊以確定網頁的編碼方式:

import urllib.request

res = urllib.request.urlopen('http://www.163.com')
print(res.info())  #info()方法 用來獲取網頁頭部
執行結果:


可以看出次網頁的編碼是 GBK。

第五行,列印就行。

但上面的寫法是裸奔型寫法,就是沒有頭部的,有一些網頁你沒有頭部是不能訪問的,會返回 403錯誤。

最正式的做法是仿照http的過程,在用爬蟲獲取網頁的時候,加入頭部,偽裝成瀏覽器。

Http 其實就是 請求/響應模式,永遠都是 客戶端向服務端傳送請求,然後服務端再返回響應。

有一個問題就是 頭部改怎麼加?可以開啟你的瀏覽器,按F12,(我用的是谷歌瀏覽器)

F12開啟開發者工具模式後,進入一個隨便一個網頁,開發者工具就會有東西出現


雙擊name欄的任意一個,在Headers 一欄會有個 User-Agent ,複製藍色部分,藍色部分就是頭部。再把藍色部分加入到爬蟲程式中,見下面程式碼:

這種方式是推薦的

import urllib.request

url = r'http://douban.com'
headers ={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
req = urllib.request.Request(url=url,headers=headers)
res = urllib.request.urlopen(req)
html = res.read().decode('utf-8')
print(html)

注意:urllib.request.Request()用於向服務端傳送請求,就如 http 協議客戶端想服務端傳送請求

而 urllib.request.urlopen()則相當於伺服器返回的響應