爬蟲筆記(二)——瀏覽器的模擬(Headers屬性)
阿新 • • 發佈:2019-02-07
有的時候,我們無法爬取一些網頁,會出現403錯誤,因為這些網頁為了防止別人惡意採集其資訊所以進行了一些反爬蟲的設定。那麼如果我們向爬取這些網頁的資訊,應該怎麼辦呢? 可以設定一些Headers資訊,模擬成瀏覽器去訪問這些網站,此時,就能夠解決這個問題了。接下來我們來找找自己瀏覽器的Headers屬性。
1.首先開啟任意網頁,按下F12,並選擇網路(network)
2.任意點選網頁連線,使其發生動作。點選其中一個動作,User-Agent字樣的一串資訊。
此時我們就得到了該資訊
User-Agent:Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.
接下來我們講如何讓爬蟲模擬成瀏覽器訪問頁面的設定方法,有以下兩種方式。
方法一:使用build_opener()修改報頭
import urllib.request url = "https://mp.csdn.net/postedit/81051697" headers = ("User-Agent","Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45") opener = urllib.request.build_opener() opener.addheaders = [headers] data = opener.open(url).read()
上述程式碼中利用urllib.request.build_opener()建立一個物件並賦給opener,接下來設定opener的addheaders,即設定對應的頭資訊,設定格式為:”物件名.addheaders = [頭資訊] ",設定好後就可以利用opener物件的open方法開啟對應的連結,此時是具有頭資訊的開啟操作行為,即會模仿瀏覽器取開啟,格式為:”物件名.open(url地址)“。
方法二:使用add_header()新增報頭
import urllib.request url = "https://mp.csdn.net/postedit/81051697" req = urllib.request.Request (url) req.add_header('User-Agent','Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45') data = urllib.request.urlopen(req).read()
首先使用urllib.request.Request(url)建立一個Request物件並賦予req,格式為:”urllib.request.Request(url地址)“,再利用add_header()函式給物件新增報頭,格式為:”物件名.add_header('欄位名','欄位值')。