日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

小说站源码php采集,关于PHP批量采集----采集小说站有感

發(fā)布時間:2023/12/9 php 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 小说站源码php采集,关于PHP批量采集----采集小说站有感 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

概況:幫周同學(xué)做小說采集做了有一段時間了。一開始是從其它網(wǎng)站的頁面上直接寫正則去采集,然后慢慢的轉(zhuǎn)為采集別人提供的API。

環(huán)境:CENTOS+NGINX+PHP5.2.17。基于JIEQI小說管理系統(tǒng)。

直接采集其它網(wǎng)站頁面的時候,主要改的是JIEQI自帶的采集系統(tǒng),印象比較深的,是加上了判斷章節(jié)順序的功能,還修改了其它的“BUG”(呀,其它具體什么來著,我現(xiàn)在都快忘了,做了好久了)。這回感觸比較深的是,是采集API。

背景:采集數(shù)十個小說站的API(目前有五個,預(yù)計有40,50個)

設(shè)計:共用一個顯示頁面,邏輯分開處理。可批量采集,可單篇采集。

上個圖:

其中,兩個實體,是根據(jù)我需要的信息,自己定義的。為什么要規(guī)定這個實體(或者是接口),主要是因為,每個API給的信息都是不一樣的,要統(tǒng)一后,才能操作。

單篇采集 VS 多篇采集

單篇采集相對比較簡單,想怎么寫都行,問題不大。

而多篇批量采集,這次寫了四個版本。

V1:將所有的操作,寫在了同一PHP進(jìn)程里面。

優(yōu)勢:邏輯簡單,容易實現(xiàn)。

缺點(diǎn):PHP進(jìn)程容易龐大,容易掛悼。

問題:最大只能設(shè)置5篇,而且,不能看到采集的過程。

V2:將所有的操作分開,用file_get_contents遍歷訪問。

優(yōu)勢:類似“異步”采集,將所有操作分開到每個進(jìn)程,單進(jìn)程不容易掛。效率很高。

缺點(diǎn):采集過程將產(chǎn)生N多個PHP進(jìn)程,NGINX會出現(xiàn)504等錯誤。

問題:如上述缺點(diǎn),如果一作品的章節(jié)較多,在短時間內(nèi)(0.1S或更短)產(chǎn)生上百個HTTP請求,NGINX出現(xiàn)問題,服務(wù)器吃不消。

改進(jìn):在PHP中加上sleep,導(dǎo)致NGINX不穩(wěn)定,集中耗資源。偶爾還出現(xiàn)file_get_contents的錯誤。

V3:結(jié)合V1和V2,用JS做定時。

思路:使用iframe,定時刷新采集的每個頁面(V2),根據(jù)頁面返回信息,做下一步操作。即:循環(huán)設(shè)置iframe的SRC。

優(yōu)勢:將采集時集中對服務(wù)器的壓力分散掉,章節(jié)按順序來入庫。

缺點(diǎn):采集的間隔時間,不太好設(shè)置。哪怕是根據(jù)iframe的返回值,再判斷,也要多加定時(采用父頁面定時刷新,定時抓取iframe的數(shù)據(jù)來判斷)。

問題:setTimeout出各種問題,會出現(xiàn)無法控制的情況。因為JS也是單線程的。setInertval也一樣。

V4:結(jié)合前面三,主要改進(jìn)是在V3的基礎(chǔ)上,再次分開。

思路:不再循環(huán)設(shè)置iframe的SRC,而是,新建N多個iframe。

優(yōu)勢:可以很輕松的控制時間(即:間隔多少S,打開新的iframe)。

缺點(diǎn):若前面的章節(jié)操作比較慢(即:比如說,第一章卡殼了,2S都還沒有連接上采集的PHP的URL。而第二章,在第0.5S后,已經(jīng)開始,且連接上了,那么第二章就會在第一章之前入庫),這里就涉及到一個章節(jié)的順序問題。還有,同上,第一章已經(jīng)連接上了,但,操作特慢,2S才搞定;而第二章,字?jǐn)?shù)少(或其它原因),1S就搞定了,問題同上。

問題:同上缺點(diǎn)所述,還有一個問題要注意。因為有些字段,必須要在采集完之后,更新表的。SO,采用了一個方法:就是子頁JS,調(diào)用父頁的JS的一個方法,在父頁中設(shè)置一個iframe(ajax或script一樣),訪問修正作品的URL。

實用:果然,實用的時候,缺點(diǎn)所產(chǎn)生的問題已經(jīng)出現(xiàn)了。

修正:將章節(jié)排序的字段,做到和章節(jié)信息一樣,放到數(shù)組里面,同步更新。這樣,哪怕第二章先入庫,但它的order,還是2。第一章后入庫,其order為1。在顯示時,還是第一章在前面。問題解決。

每個采集站的API和模版都分開了,這樣的好處就是統(tǒng)一了接口,其它的自由發(fā)揮。做這個玩意,也被周同學(xué)說了幾次,不過想想,確實,一開始做的時候,沒有考慮這么細(xì),做得不夠好,看來,還是經(jīng)驗不夠啊。

當(dāng)然,采集的話,建議使用.net做成一個EXE。有向周同學(xué)提,但他覺得更麻煩,也懶得重新來弄過。現(xiàn)在這個版本,夠用了,符合要求了。還有優(yōu)化的地方繼續(xù)優(yōu)化。

此拋磚引玉,期待大牛們的指點(diǎn)。

總結(jié)

以上是生活随笔為你收集整理的小说站源码php采集,关于PHP批量采集----采集小说站有感的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。