本文實(shí)例講述了python爬蟲模擬瀏覽器的兩種方法。分享給大家供大家參考,具體如下:
爬蟲爬取網(wǎng)站出現(xiàn)403,因?yàn)檎军c(diǎn)做了防爬蟲的設(shè)置
一、Herders 屬性
爬取CSDN博客
import urllib.requesturl = "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)頁(yè),比如打開百度,然后按F12,此時(shí)會(huì)出現(xiàn)一個(gè)窗口,我們切換到Network標(biāo)簽頁(yè),然后點(diǎn)擊刷新網(wǎng)站,選中彈出框左側(cè)的“www.baidu.com”,即下圖所示:

往下拖動(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)頁(yè)。
二、方法1:使用build_opener()修改報(bào)頭
由于urlopen()不支持一些HTTP的高級(jí)功能,所以我們需要修改報(bào)頭。可以使用urllib.request.build_opener()進(jìn)行,我們修改一下上面的代碼:
import urllib.requesturl = "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對(duì)象并賦值給opener,然后設(shè)置opener的addheaders,就是設(shè)置對(duì)應(yīng)的頭信息,格式為:“opener(對(duì)象名).addheaders = [頭信息(即我們儲(chǔ)存的具體信息)]”,設(shè)置好后我們就可以使用opener對(duì)象的open()方法打開對(duì)應(yīng)的網(wǎng)址了。格式:“opener(對(duì)象名).open(url地址)”打開后我們可以使用read()方法來讀取對(duì)應(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" rel="external nofollow" /> ...
三、方法2:使用add_header()添加報(bào)頭
除了上面的這種方法,還可以使用urllib.request.Request()下的add_header()實(shí)現(xiàn)瀏覽器的模擬。
先上代碼
import urllib.requesturl = "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)
新聞熱點(diǎn)
疑難解答
圖片精選