溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python爬蟲如何模擬瀏覽器

發(fā)布時(shí)間:2021-08-11 15:21:26 來源:億速云 閱讀:1082 作者:小新 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)python爬蟲如何模擬瀏覽器,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

一、Herders 屬性

爬取CSDN博客

import urllib.request
url = "http://blog.csdn.net/hurmishine/article/details/71708030"file = urllib.request.urlopen(url)

爬取結(jié)果

urllib.error.HTTPError: HTTP Error 403: Forbidden

這就說明CSDN做了一些設(shè)置,來防止別人惡意爬取信息

所以接下來,我們需要讓爬蟲模擬成瀏覽器

任意打開一個(gè)網(wǎng)頁,比如打開百度,然后按F12,此時(shí)會(huì)出現(xiàn)一個(gè)窗口,我們切換到Network標(biāo)簽頁,然后點(diǎn)擊刷新網(wǎng)站,選中彈出框左側(cè)的“www.baidu.com”,即下圖所示:

python爬蟲如何模擬瀏覽器

往下拖動(dòng) 我們會(huì)看到“User-Agent”字樣的一串信息,沒錯(cuò) 這就是我們想要的東西。我們將其復(fù)制下來。

此時(shí)我們得到的信息是:”Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36”

接下來我們可以用兩種方式來模擬瀏覽器訪問網(wǎng)頁。

二、方法1:使用build_opener()修改報(bào)頭

由于urlopen()不支持一些HTTP的高級功能,所以我們需要修改報(bào)頭??梢允褂胾rllib.request.build_opener()進(jìn)行,我們修改一下上面的代碼:

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)

上面代碼中我們先定義一個(gè)變量headers來儲(chǔ)存User-Agent信息,定義的格式是(“User-Agent”,具體信息)
具體信息我們上面已經(jīng)獲取到了,這個(gè)信息獲取一次即可,以后爬取其他網(wǎng)站也可以用,所以我們可以保存下來,不用每次都F12去找了。

然后我們用urllib.request.build_opener()創(chuàng)建自定義的opener對象并賦值給opener,然后設(shè)置opener的addheaders,就是設(shè)置對應(yīng)的頭信息,格式為:“opener(對象名).addheaders = [頭信息(即我們儲(chǔ)存的具體信息)]”,設(shè)置好后我們就可以使用opener對象的open()方法打開對應(yīng)的網(wǎng)址了。格式:“opener(對象名).open(url地址)”打開后我們可以使用read()方法來讀取對應(yīng)數(shù)據(jù),并賦值給data變量。

得到輸出結(jié)果

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()添加報(bào)頭

除了上面的這種方法,還可以使用urllib.request.Request()下的add_header()實(shí)現(xiàn)瀏覽器的模擬。

先上代碼

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)

好,我們來分析一下。

導(dǎo)入包,定義url地址我們就不說了,我們使用urllib.request.Request(url)創(chuàng)建一個(gè)Request對象,并賦值給變量req,創(chuàng)建Request對象的格式:urllib.request.Request(url地址)

隨后我們使用add_header()方法添加對應(yīng)的報(bào)頭信息,格式:Request(對象名).add_header(‘對象名','對象值')

現(xiàn)在我們已經(jīng)設(shè)置好了報(bào)頭,然后我們使用urlopen()打開該Request對象即可打開對應(yīng)的網(wǎng)址,多以我們使用

data = urllib.request.urlopen(req).read()打開了對應(yīng)的網(wǎng)址,并讀取了網(wǎng)頁內(nèi)容,并賦值給data變量。

以上,我們使用了兩種方法實(shí)現(xiàn)了爬蟲模擬瀏覽器打開網(wǎng)址,并獲取網(wǎng)址的內(nèi)容信息,避免了403錯(cuò)誤。

值得我們注意的是,方法1中使用的是addheaders()方法,方法2中使用的是add_header()方法,注意末尾有無s以及有無下劃線的區(qū)別

關(guān)于“python爬蟲如何模擬瀏覽器”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯(cuò),請把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI