技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運(yùn)營

贊助商

分類目錄

贊助商

最新文章

搜索

UserAgent設(shè)置不當(dāng)導(dǎo)致php抓取網(wǎng)頁失敗

作者:admin    時間:2013-11-18 21:44:40    瀏覽:

php抓取網(wǎng)頁,可謂輕而易舉,幾行代碼就可以搞定。不過,如果你有所疏忽,程序?qū)懙貌粔驀?yán)密,就會出現(xiàn)有的網(wǎng)頁抓取成功有的網(wǎng)頁卻抓不了的問題。

先來看看php抓取代碼的一個方法:

<?php
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, ‘http://www.howtostagehomes.com/’);
$data = curl_exec($curl);
?>

代碼中$data就是要抓取的網(wǎng)頁html代碼了。

但是如果使用這個程序去抓取網(wǎng)頁文件,無疑是十分脆弱的。這可能對抓取大多數(shù)網(wǎng)頁沒有什么問題,但是某些網(wǎng)頁,你會抓不到目標(biāo)文件,取而代之的抓到意想不到的網(wǎng)頁代碼。這是什么原因呢?

其實,curl_setopt()的可選參數(shù)有的是十分重要的,在抓取網(wǎng)頁這部分,有一個參數(shù)我們必須要考慮進(jìn)去,那就是UserAgent。什么是UserAgent?UserAgent簡稱(UA),是一個只讀的字符串,它聲明了瀏覽器用于 HTTP 請求的用戶代理頭的值。簡單來說,就是“聲明用什么瀏覽器來打開目標(biāo)網(wǎng)頁”。

說到這里,可能有的人會意識到不同的UserAgent會得到不同的網(wǎng)頁請求了,例如手機(jī)瀏覽器和PC瀏覽器,就會得到不同的網(wǎng)頁文件。舉個例子,假如PC瀏覽器和手機(jī)瀏覽器,打開www.howtostagehomes.com,就會得到不同的結(jié)果頁,這其實就是UserAgent的不同的結(jié)果。居于這個原因,卡卡測速網(wǎng)網(wǎng)站速度測試的程序就使用了用戶自定義UA的網(wǎng)頁抓取程序。

好了,說到這里,我想大家都明白上述代碼應(yīng)該怎樣修改了吧。

正確的寫法應(yīng)該是這樣的:

<?php
$UserAgent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; .NET CLR 3.5.21022; .NET CLR 1.0.3705; .NET CLR 1.1.4322)'
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, ‘http://www.howtostagehomes.com/’);
curl_setopt($curl, CURLOPT_USERAGENT, $UserAgent);
$data = curl_exec($curl);
?>

上述代碼聲明使用IE瀏覽器打開網(wǎng)頁。

當(dāng)然,你也可以聲明用Firefox的UserAgent打開網(wǎng)頁,代碼如下:

$UserAgent = 'Mozilla/5.0 (Windows; U; Windows NT 5.2) Gecko/2008070208 Firefox/3.0.1';

你還可以聲明用其他UserAgent打開網(wǎng)頁。下面是IE8的UserAgent:

IE8 on Windows Vista (兼容瀏覽)
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0)

IE8 on Windows Vista
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)

IE8 on Windows 7
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)

64-bit IE on 64-bit Windows 7:
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0)

32-bit IE on 64-bit Windows 7:
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0)

Firefox的UserAgent:

Mozilla/5.0 (Windows; U; Windows NT 5.2) Gecko/2008070208 Firefox/3.0.1
Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070309 Firefox/2.0.0.3
Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070803 Firefox/1.5.0.12

Chrome的UserAgent:

Mozilla/5.0 (Windows; U; Windows NT 5.2) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13

Navigator的userAgent:

Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.12) Gecko/20080219 Firefox/2.0.0.12 Navigator/9.0.0.6

Safari的userAgent:

Mozilla/5.0 (Windows; U; Windows NT 5.2) AppleWebKit/525.13 (KHTML, like Gecko) Version/3.1 Safari/525.13 
Mozilla/5.0 (iPhone; U; CPU like Mac OS X) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/4A93 Safari/419.3

Opera的userAgent:

Opera/9.27 (Windows NT 5.2; U; zh-cn) 
Opera/8.0 (Macintosh; PPC Mac OS X; U; en) 
Mozilla/5.0 (Macintosh; PPC Mac OS X; U; en) Opera 8.0

通過設(shè)置UserAgent,可以避免有的網(wǎng)頁因UA不同而返回不同http請求的錯誤,讓自己的抓取網(wǎng)頁程序更加完善嚴(yán)密。

標(biāo)簽: UserAgent  
相關(guān)文章
    x
    • 站長推薦
    /* 左側(cè)顯示文章內(nèi)容目錄 */