python爬蟲模擬瀏覽器的兩種方法例項分析

2022-10-04 15:36:20 字數 2463 閱讀 2728

爬蟲爬取**出現403,因為站點做了防爬蟲的設定

一、herders 屬性

爬取csdn部落格

import urllib.request

url = ""file = urllib.request.urlopen(url)

爬取結果

這就說明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 = ""headers = ("user-agent","mozilla/5.0 (windows nt 10.0; wow64) applewebkit/537 (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,就是設定對應的頭資訊,格式為:「www.cppcns.comopener(物件名).addheaders = [頭資訊(即我們儲存的具體資訊)]」,設定好後我們就可以使用opener物件的open()方法開啟對應的**了。格式:「opener(物件名).open(url位址)」開啟後我們可以使用read()方法來讀取對應資料,並賦值給data變數。

得到輸出結果

b'\r\n\r\n     \r\n    ssowoojnbpxmlns="">\r\n    \r\n

\r\n\r\n            ...

三、方法2:使用add_header()新增報頭

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

先上**

import urllib.request

url = ""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爬蟲模擬瀏覽器示例

抓取 網頁中的所有出版社的名稱。網頁如圖 方法1 import re import urllib.request from urllib.request import urlopen,request pattern 使用正規表示式抽取,輸出的東西在 之中 headers 模擬瀏覽器 ret requ...

Python爬蟲 模擬瀏覽器訪問 Requests

有時候爬蟲需要加入請求頭來偽裝成瀏覽器,以便更好的抓取資料.開啟瀏覽器chrome找到user agent進行複製 headers headers get方法新增請求頭 print res.text 執行結果 requests庫不僅有get 方法,還有post 等方法.post 方法用於提交表單來爬...

python爬蟲模擬瀏覽器的兩種方法例項分析

爬蟲爬取 出現403,因為站點做了防爬蟲的設定 一 herders 屬性 爬取csdn部落格 import urllib.request url file urllib.request.urlopen url 爬取結果 urllib.error.httperror http error 403 fo...