PHP 正則表達式抓取網頁內容。

我想用php抓取愛奇藝生活類型視頻網頁裏面的元素,應該如何去做呢?

首先我要非常熟悉正則表達式,關於正則表達式的學習,我會寫一篇博客一直學習的。


直接舉例子:

這是一個愛奇藝生活視頻的界面的網址

$url="http://www.iqiyi.com/v_19rrb1wlpw.html";


php的file_get_contents()函數,是把網頁裏的源碼全部變成字符串讀取出來。


$showdata=file_get_contents($url);


echo $showdata;


這幾句話就可以做到把網頁源碼拿過來,再顯示出來。


在得到網頁源碼的基礎上,我們再利用正則表達式,把自己需要的內容提取出來。


php的preg_match_all('正則表達式內容','目標字符串',‘儲存的字符串’);


上面的例子中  preg_match_all('/cid:(\d+)/', $showdata, $cid); 則是查找網頁源碼中所有符合cid:+數字的所有字符串。儲存在cid中,cid是一個二維數組。


最簡單的方法就是上面這些。但是在實際用到的時候卻遇到一些問題。首先,網頁源代碼是網頁初始化之前的代碼,如果我們需要提取網頁初始化之後的某些元素怎麼辦?


file_get_contents()只能獲得源代碼。初始化好之後的網頁,無疑是通過post或者get請求數據得來的,我們打開javascript 控制檯




看到network ,裏面是每個網頁源代碼中加載的請求,而我們需要的元素就在這些請求之中,你需要把請求找出來,一般,視頻網站向後臺獲取數據,都是由規律的,你需要自己去分析,獲得視頻網站的後臺數據的url,我分析了一下午,找到了愛奇藝生活視頻的後臺數據url。


第二個問題就是正則表達式的問題,首先正則表達式比較難,容易寫錯,強烈建議,下載一個正則表達式測試器,先測試一下。

在獲取網頁內容中,我遇到了一個問題,如果用preg_match_all 抓取玩內容,在抓取的內容的基礎上面再用preg_match_all,再抓取一次,這個時候會遇到問題。

因爲第一次抓取獲得的是一個二維數組,我們應該把它變成字符串,簡單的用a[0][0]是不行的,需要用到implode函數 $b=implode('',$a[0]);



發佈了367 篇原創文章 · 獲贊 25 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章