PHP 采集程序原理分析篇
苦想了幾天,終于弄明白了里面的道理。在這里寫出來,請高手指正。
采集程序的思路很簡單,無非就是先打一個(gè)頁面,一般都是列表頁,取得里面全部鏈接的地址,然后打開逐條鏈接,尋找我們感興趣的東西,如果找到,就把它入庫或別的處理。下面以一個(gè)很簡單的例子來說說。
首先確定一個(gè)采集頁,一般就是列表面了。這里目標(biāo)是:http://www.dbjr.com.cn/article/11/index.htm。這是一個(gè)列表頁,我們的目的就是采集這個(gè)列表頁上全部的文章。
有列表頁了,第一步先打開它,把它的內(nèi)容納入到我們的程序中來。一般用fopen或是file_get_contents這兩個(gè)函數(shù),我們這里用fopen作例子。怎么打開它呢?很簡單:$source=fopen("http://www.dbjr.com.cn/article/11/index.htm",'r');實(shí)際上已經(jīng)把內(nèi)容納入到我們的程序中來了。注意得到的$source是一個(gè)資源,不是可處理的文本,所以再用函數(shù)fread將內(nèi)容讀到一個(gè)變量中,這次就是真正的可編輯的文本了。例子:
$content=fread($source,99999);后面的數(shù)字表示字節(jié)數(shù),填個(gè)大的就行。你用file_put_contents將$content寫入到一個(gè)文本文件,可以看出里面的內(nèi)容其實(shí)就是網(wǎng)頁的源碼。得到了網(wǎng)頁的源碼,我們就要分析里面的文章鏈接地址,這里要用到正則表達(dá)式了,[推薦正則表達(dá)式教程(http://www.dbjr.com.cn/article/7/all/545.1.htm)]。通過查看源代碼,我們可以看到里面文章的鏈接地址全是這個(gè)樣子<div class="in_arttitle"><a href="http://www.dbjr.com.cn/article/10/all/273.1.htm"> 將數(shù)據(jù)庫連接代碼封裝在函數(shù)里,在需要讀取時(shí)調(diào)用..</a>
我們就可以寫正則表達(dá)式了。$count=preg_match_all("/<div class=\"in_arttitle\"><a\shref=\"(.+?)\">(.+?)<\/a>/",$content,$art_list);
其中數(shù)組$art_list[1][$s]里面包含的就是某個(gè)文章的鏈接地址。而$art_list[2][$s]包含的就是某一文章的標(biāo)題。到了這一步就可以算成功了一半了。
接著用for循環(huán)依次打每個(gè)鏈接,然后像取得標(biāo)題一樣的方法取得內(nèi)容即可。以上這些和我在網(wǎng)上找的教程都差不多,但是到了這個(gè)for循環(huán)網(wǎng)上的教程可就差勁,還沒找到一篇可以說清這個(gè)事的文章,剛開始我是用js來幫助循環(huán)的,還是用實(shí)例說吧,剛開始我是這樣做的:
for($i=0;$i<20;4i++ {
中間就是采集內(nèi)容的部分了,省略了
采集了一頁,肯定要采集再一頁啊
可是再用fopen打開鏈接時(shí)就不行了。請求失敗什么的,用js也不行,最后才知道要用這句echo "<META HTTP-EQUIV=REFRESH CONTENT='0;URL=aa.php?id=1'>";其中aa.php就是我們的程序的文件名, id后面的數(shù)字就可以幫助我們實(shí)現(xiàn)循環(huán),采集多個(gè)頁面。這就是能真正循環(huán)起來的關(guān)鍵
}
腦子有點(diǎn)難受,寫得有點(diǎn)亂,將就著看吧,在高手看來這可能沒什么大不了的,可是對于我等菜鳥來說,實(shí)在是很有幫助。
相關(guān)文章
php使用curl實(shí)現(xiàn)簡單模擬提交表單功能
這篇文章主要為大家詳細(xì)介紹了php使用curl實(shí)現(xiàn)簡單模擬提交表單功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05PHP實(shí)現(xiàn)指定字段的多維數(shù)組排序函數(shù)分享
這篇文章主要介紹了PHP實(shí)現(xiàn)指定字段的多維數(shù)組排序函數(shù)分享,本文分享了一段PHP指定字段的多維數(shù)組排序方法的代碼,這段代碼可實(shí)現(xiàn)根據(jù)field字段對數(shù)組進(jìn)行排序,需要的朋友可以參考下2015-03-03PHP面向?qū)ο蟪绦蛟O(shè)計(jì)繼承用法簡單示例
這篇文章主要介紹了PHP面向?qū)ο蟪绦蛟O(shè)計(jì)繼承用法,結(jié)合具體實(shí)例形式分析了php面向?qū)ο蟪绦蛟O(shè)計(jì)中繼承的相關(guān)概念、原理、使用技巧與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2018-12-12PHP獲取表單數(shù)據(jù)與HTML嵌入PHP腳本的實(shí)現(xiàn)
下面小編就為大家?guī)硪黄狿HP獲取表單數(shù)據(jù)與HTML嵌入PHP腳本的實(shí)現(xiàn)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02PHP基于ICU擴(kuò)展intl快速實(shí)現(xiàn)漢字轉(zhuǎn)拼音及按拼音首字母分組排序的方法
這篇文章主要介紹了PHP基于ICU擴(kuò)展intl快速實(shí)現(xiàn)漢字轉(zhuǎn)拼音及按拼音首字母分組排序的方法,結(jié)合實(shí)例形式分析了ICU擴(kuò)展intl的實(shí)現(xiàn)方法與拼音轉(zhuǎn)換、排序等相關(guān)操作技巧,需要的朋友可以參考下2017-05-05PHP實(shí)現(xiàn)瀏覽器格式化顯示XML的方法示例
這篇文章主要介紹了PHP實(shí)現(xiàn)瀏覽器格式化顯示XML的方法,涉及php針對xml節(jié)點(diǎn)的創(chuàng)建、添加、格式化顯示等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2019-01-01PHP實(shí)現(xiàn)簡單的協(xié)程任務(wù)調(diào)度demo示例
這篇文章主要介紹了PHP實(shí)現(xiàn)簡單的協(xié)程任務(wù)調(diào)度demo,結(jié)合實(shí)例形式詳細(xì)分析了PHP基于協(xié)程的任務(wù)調(diào)度基本原理、定義及使用技巧,需要的朋友可以參考下2020-02-02php實(shí)現(xiàn)的Cookies操作類實(shí)例
這篇文章主要介紹了php實(shí)現(xiàn)的Cookies操作類及其用法實(shí)例,包括了常見了保存、讀取、更新及清除cookie等操作,在需要進(jìn)行cookie操作時(shí)非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-09-09