python爬蟲模擬瀏覽器的兩種方法實例分析
本文實例講述了python爬蟲模擬瀏覽器的兩種方法。分享給大家供大家參考,具體如下:
爬蟲爬取網(wǎng)站出現(xiàn)403,因為站點做了防爬蟲的設置
一、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做了一些設置,來防止別人惡意爬取信息
所以接下來,我們需要讓爬蟲模擬成瀏覽器
任意打開一個網(wǎng)頁,比如打開百度,然后按F12,此時會出現(xiàn)一個窗口,我們切換到Network標簽頁,然后點擊刷新網(wǎng)站,選中彈出框左側(cè)的“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”
接下來我們可以用兩種方式來模擬瀏覽器訪問網(wǎng)頁。
二、方法1:使用build_opener()修改報頭
由于urlopen()不支持一些HTTP的高級功能,所以我們需要修改報頭??梢允褂胾rllib.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”,具體信息)
具體信息我們上面已經(jīng)獲取到了,這個信息獲取一次即可,以后爬取其他網(wǎng)站也可以用,所以我們可以保存下來,不用每次都F12去找了。
然后我們用urllib.request.build_opener()
創(chuàng)建自定義的opener對象并賦值給opener,然后設置opener的addheaders,就是設置對應的頭信息,格式為:“opener(對象名).addheaders = [頭信息(即我們儲存的具體信息)]”,設置好后我們就可以使用opener對象的open()方法打開對應的網(wǎng)址了。格式:“opener(對象名).open(url地址)”打開后我們可以使用read()方法來讀取對應數(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" rel="external nofollow" /> ...
三、方法2:使用add_header()添加報頭
除了上面的這種方法,還可以使用urllib.request.Request()
下的add_header()
實現(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)
好,我們來分析一下。
導入包,定義url地址我們就不說了,我們使用urllib.request.Request(url)
創(chuàng)建一個Request對象,并賦值給變量req,創(chuàng)建Request對象的格式:urllib.request.Request(url地址)
隨后我們使用add_header()
方法添加對應的報頭信息,格式:Request(對象名).add_header(‘對象名','對象值')
現(xiàn)在我們已經(jīng)設置好了報頭,然后我們使用urlopen()打開該Request對象即可打開對應的網(wǎng)址,多以我們使用
data = urllib.request.urlopen(req).read()
打開了對應的網(wǎng)址,并讀取了網(wǎng)頁內(nèi)容,并賦值給data變量。
以上,我們使用了兩種方法實現(xiàn)了爬蟲模擬瀏覽器打開網(wǎng)址,并獲取網(wǎng)址的內(nèi)容信息,避免了403錯誤。
值得我們注意的是,方法1中使用的是addheaders()
方法,方法2中使用的是add_header()
方法,注意末尾有無s以及有無下劃線的區(qū)別
更多關于Python相關內(nèi)容可查看本站專題:《Python Socket編程技巧總結(jié)》、《Python正則表達式用法總結(jié)》、《Python數(shù)據(jù)結(jié)構與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對大家Python程序設計有所幫助。
相關文章
淺談Python2之漢字編碼為unicode的問題(即類似\xc3\xa4)
今天小編就為大家分享一篇淺談Python2之漢字編碼為unicode的問題(即類似\xc3\xa4),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08如何使用PyCharm將代碼上傳到GitHub上(圖文詳解)
這篇文章主要介紹了如何使用PyCharm將代碼上傳到GitHub上(圖文詳解),文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-04-04學習python之編寫簡單簡單連接數(shù)據(jù)庫并執(zhí)行查詢操作
這篇文章主要介紹了學習python之編寫簡單簡單連接數(shù)據(jù)庫并執(zhí)行查詢操作,需要的朋友可以參考下2016-02-02numpy展平數(shù)組ndarray.flatten()詳解
這篇文章主要介紹了numpy展平數(shù)組ndarray.flatten()詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06使用PySpark實現(xiàn)數(shù)據(jù)清洗與JSON格式轉(zhuǎn)換的實踐詳解
在大數(shù)據(jù)處理中,PySpark?提供了強大的工具來處理海量數(shù)據(jù),特別是在數(shù)據(jù)清洗和轉(zhuǎn)換方面,本文將介紹如何使用?PySpark?進行數(shù)據(jù)清洗,并將數(shù)據(jù)格式轉(zhuǎn)換為?JSON?格式的實踐,感興趣的可以了解下2023-12-12