国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開發(fā) > Python > 正文

python爬蟲模擬瀏覽器的兩種方法實(shí)例分析

2024-09-09 19:03:07
字體:
供稿:網(wǎng)友

本文實(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)
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 磐石市| 招远市| 浦江县| 永顺县| 积石山| 通化市| 香格里拉县| 阳朔县| 东海县| 商都县| 轮台县| 榆树市| 农安县| 金秀| 柘荣县| 利辛县| 阿拉善左旗| 当阳市| 抚顺市| 台北县| 壤塘县| 南投县| 莱阳市| 巧家县| 青河县| 韶关市| 虎林市| 瑞昌市| 饶平县| 英德市| 玉山县| 胶南市| 定州市| 邻水| 横山县| 琼结县| 佳木斯市| 永顺县| 商水县| 蓝山县| 锦屏县|