鍍金池/ 問答/PHP  網(wǎng)絡(luò)安全/ 請問PHP如何執(zhí)行大批量json數(shù)據(jù)

請問PHP如何執(zhí)行大批量json數(shù)據(jù)

目前再做一個東西,需要使用PHP的curl功能,從一個json數(shù)據(jù)里面讀出數(shù)據(jù),然后循環(huán)到curl里面抓取數(shù)據(jù)。

這個本身沒啥很簡單,但是目前的問題是json數(shù)據(jù)量太大了【十幾萬左右】,沒法一次性抓取數(shù)據(jù),每次手動從大的json數(shù)據(jù)里面復(fù)制20-30個,然后執(zhí)行curl,但是想想十幾萬的數(shù)據(jù)量,細思極恐。

大概想法是能不能每次按順序讀取20個數(shù)據(jù),然后執(zhí)行,執(zhí)行第N遍停止,或者每次執(zhí)行前20個數(shù)據(jù),執(zhí)行完成之后刪除數(shù)據(jù)。

json數(shù)據(jù)非常簡單,下面只是簡單舉例,實際上是英文的

'11111','22222','33333','44444','55555','66666'……

簡單說就是上面的json加入某個網(wǎng)址循環(huán)curl抓取,比如:
http://xxoo.com/id/11111
http://xxoo.com/id/22222
http://xxoo.com/id/33333
...
因為是虛擬主機,無法大批量的抓取,所以考慮每次抓取20-30個,積少成多,把十幾萬的數(shù)據(jù)抓取完

回答
編輯回答
凹凸曼

php的yield可以實現(xiàn)樓主所要的功能
參考博客,一次性讀取大量內(nèi)容
https://blog.csdn.net/s371795...

2017年11月2日 18:17
編輯回答
笨笨噠

實際上 JSON 并不適合用來處理特別大量的數(shù)據(jù),因為它要求很嚴格的數(shù)據(jù)結(jié)構(gòu)。所以第一步你應(yīng)該考慮是否可以不用 JSON,就用 CSV 之類的文件結(jié)構(gòu)。

如果非要用 JSON,那么可能只有自己寫解析器了,思路大體是讀若干字節(jié),然后解析出你要的內(nèi)容,如此反復(fù)。你必須忽略一些結(jié)構(gòu),因為 JSON 要求只有一個根,所以最外層的結(jié)構(gòu)多半要忽略掉。然后根據(jù)你對文件結(jié)構(gòu)的預(yù)判,解析出你要的數(shù)據(jù)。

2018年3月12日 15:58
編輯回答
疚幼
這個本身沒啥很簡單,但是目前的問題是json數(shù)據(jù)量太大了【十幾萬左右】,沒法一次性抓取數(shù)據(jù),每次手動從大的json數(shù)據(jù)里面復(fù)制20-30個,然后執(zhí)行curl,但是想想十幾萬的數(shù)據(jù)量,細思極恐。

這里停一下,JSON數(shù)據(jù)量太大是每次執(zhí)行的數(shù)據(jù)量太大還是單次就這么大。另外不能一次性全抓大根本是什么?手動?另外CURL可以并行執(zhí)行,好吧,其實我沒太懂說得是什么

2017年8月6日 13:56