1. 程式人生 > 程式設計 >python爬蟲模擬瀏覽器的兩種方法例項分析

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程式設計有所幫助。