python爬蟲模擬瀏覽器的兩種方法例項分析
本文例項講述了python爬蟲模擬瀏覽器的兩種方法。分享給大家供大家參考,具體如下:
爬蟲爬取網站出現403,因為站點做了防爬蟲的設定
一、Herders 屬性
爬取CSDN部落格
import urllib.request url = "http://blog.csdn.net/hurmishine/article/details/71708030"file = urllib.request.urlopen(url)
爬取結果
urllib.error.HTTPError: HTTP Error 403: Forbidden
這就說明CSDN做了一些設定,來防止別人惡意爬取資訊
所以接下來,我們需要讓爬蟲模擬成瀏覽器
任意開啟一個網頁,比如開啟百度,然後按F12,此時會出現一個視窗,我們切換到Network標籤頁,然後點選重新整理網站,選中彈出框左側的“www.baidu.com”,即下圖所示:
往下拖動 我們會看到“User-Agent”字樣的一串資訊,沒錯 這就是我們想要的東西。我們將其複製下來。
此時我們得到的資訊是:”Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/58.0.3029.110 Safari/537.36”
接下來我們可以用兩種方式來模擬瀏覽器訪問網頁。
二、方法1:使用build_opener()修改報頭
由於urlopen()不支援一些HTTP的高階功能,所以我們需要修改報頭。可以使用urllib.request.build_opener()進行,我們修改一下上面的程式碼:
import urllib.request url = "http://blog.csdn.net/hurmishine/article/details/71708030"headers = ("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/58.0.3029.110 Safari/537.36") opener = urllib.request.build_opener() opener.addheaders = [headers] data = opener.open(url).read() print(data)
上面程式碼中我們先定義一個變數headers來儲存User-Agent資訊,定義的格式是(“User-Agent”,具體資訊)
具體資訊我們上面已經獲取到了,這個資訊獲取一次即可,以後爬取其他網站也可以用,所以我們可以儲存下來,不用每次都F12去找了。
然後我們用urllib.request.build_opener()
建立自定義的opener物件並賦值給opener,然後設定opener的addheaders,就是設定對應的頭資訊,格式為:“opener(物件名).addheaders = [頭資訊(即我們儲存的具體資訊)]”,設定好後我們就可以使用opener物件的open()方法開啟對應的網址了。格式:“opener(物件名).open(url地址)”開啟後我們可以使用read()方法來讀取對應資料,並賦值給data變數。
得到輸出結果
b'\r\n<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r\n \r\n <html xmlns="http://www.w3.org/1999/xhtml">\r\n \r\n<head> \r\n\r\n <link rel="canonical" href="http://blog.csdn.net/hurmishine/article/details/71708030" rel="external nofollow" /> ...
三、方法2:使用add_header()新增報頭
除了上面的這種方法,還可以使用urllib.request.Request()
下的add_header()
實現瀏覽器的模擬。
先上程式碼
import urllib.request url = "http://blog.csdn.net/hurmishine/article/details/71708030"req = urllib.request.Request(url) req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/58.0.3029.110 Safari/537.36') data = urllib.request.urlopen(req).read() print(data)
好,我們來分析一下。
匯入包,定義url地址我們就不說了,我們使用urllib.request.Request(url)
建立一個Request物件,並賦值給變數req,建立Request物件的格式:urllib.request.Request(url地址)
隨後我們使用add_header()
方法新增對應的報頭資訊,格式:Request(物件名).add_header(‘物件名','物件值')
現在我們已經設定好了報頭,然後我們使用urlopen()開啟該Request物件即可開啟對應的網址,多以我們使用
data = urllib.request.urlopen(req).read()
打開了對應的網址,並讀取了網頁內容,並賦值給data變數。
以上,我們使用了兩種方法實現了爬蟲模擬瀏覽器開啟網址,並獲取網址的內容資訊,避免了403錯誤。
值得我們注意的是,方法1中使用的是addheaders()
方法,方法2中使用的是add_header()
方法,注意末尾有無s以及有無下劃線的區別
更多關於Python相關內容可檢視本站專題:《Python Socket程式設計技巧總結》、《Python正則表示式用法總結》、《Python資料結構與演算法教程》、《Python函式使用技巧總結》、《Python字串操作技巧彙總》、《Python入門與進階經典教程》及《Python檔案與目錄操作技巧彙總》
希望本文所述對大家Python程式設計有所幫助。