目前網(wǎng)絡(luò)爬蟲用的比較多的是用Python寫的,有很多第三方包可以直接使用,而使用PHP的網(wǎng)絡(luò)爬蟲很少有現(xiàn)成的開(kāi)發(fā)包,大多都是公司自己內(nèi)部開(kāi)發(fā)的,本文則主要介紹使用PHP如何開(kāi)發(fā)網(wǎng)絡(luò)爬蟲,提供正則匹配dom標(biāo)簽的封裝。
本文結(jié)構(gòu):
一、抓取需要登錄網(wǎng)頁(yè)
二、抓取不需要登錄的網(wǎng)頁(yè)
三、總結(jié)
本文適合有過(guò)PHP curl和正則開(kāi)發(fā)經(jīng)驗(yàn)的人群。
一、抓取需要登錄網(wǎng)頁(yè)
1、拿到cookie
需要登錄后的網(wǎng)頁(yè)通常利用curl模塊發(fā)送cookie模擬請(qǐng)求,查看cookie的方式如下:

2、利用cookie獲取網(wǎng)頁(yè)內(nèi)容
演示代碼如下:

其中phpcharset函數(shù)是轉(zhuǎn)換字符編碼用,具體代碼如下:

3、獲取網(wǎng)頁(yè)指定dom內(nèi)容
此處需要用到正則匹配HTML標(biāo)簽,下面提供的函數(shù)支持指定HTML標(biāo)簽、指定ID屬性和指導(dǎo)class屬性匹配:

二、抓取不需要登錄的網(wǎng)頁(yè)
同上面的方法,只是抓取網(wǎng)絡(luò)內(nèi)容的時(shí)候不需要指導(dǎo)cookie值。
三、總結(jié)
1、如果想爬取整個(gè)網(wǎng)站的內(nèi)容怎么操作?
利用上面的ihttp_get先獲取首頁(yè)內(nèi)容,然后利用get_tag_content獲取頁(yè)面所有的a標(biāo)簽內(nèi)容,然后遞歸即可。
2、get_tag_content之所以提供指定id熟悉和class熟悉,是為了方便查找特定的dom標(biāo)簽,可以更加快速的獲取想要的內(nèi)容入庫(kù)。
3、不熟悉正則表達(dá)式的童鞋可以通過(guò)simple_html_dom來(lái)解析,不過(guò)耗用內(nèi)存大。
4、如果抓取很多頁(yè)面,建議通過(guò)swoole開(kāi)啟多線程來(lái)抓取。