你是想抓別人網頁上ajax動態(tài)載入的數據吧?
創(chuàng)新互聯建站是一家專注于成都網站制作、成都網站設計與策劃設計,多倫網站建設哪家好?創(chuàng)新互聯建站做網站,專注于網站建設十載,網設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:多倫等地區(qū)。多倫做網站價格咨詢:18982081108
1、要找到它的ajax載入的URL地址
2、利用PHP的file_get_contents($url)函數讀取那個url地址。
3、對抓取到的內容進行分析或正則過濾。
簡單的分了幾個步驟:
1、確定采集目標
2、獲取目標遠程頁面內容(curl、file_get_contents)
3、分析頁面html源碼,正則匹配你需要的內容(preg_match、preg_match_all),這一步最為重要,不同頁面正則匹配規(guī)則不一樣
4、入庫
以前我用過querylist插件抓數據,服務器寫和定時器,每天固定時間去運行腳本。朝這個方式試試
高并發(fā)下數據的更新,應該 update table xxx set num = num - 1 的方式,這種方式可以保證數據的正確性。
但是會出現 num 為負數的問題,如果庫存為負數,顯然是不合理的。
于是,需要將 num 字段設置為 無符號整型,這樣就不會出現負數了,因為,如果減到負數,就會更新失敗。
但是這種依然會造成很多無用的更新語句的執(zhí)行,是不合理的。
于是,update table xxx set num = num - 1 where num 0,
這樣當 num 等于0之后就不會去更新數據庫了,減少了很多無用的開銷。
這種方式被稱作“樂觀鎖”
此外,對于搶紅包這種非整數的操作,我們應該轉換為整數的操作。
關于搶購超賣的控制
一般搶購功能是一個相對于正常售賣系統(tǒng)來說獨立的子系統(tǒng),這樣既可以防止搶購時的高并發(fā)影響到正常系統(tǒng),
也可以做到針對于搶購業(yè)務的特殊處理。
在后臺設計一些功能,可以就昂正常的商品加入到搶購活動中并編輯成為搶購商品,寫入到搶購商品表,當然
也可以把搶購商品表寫入redis而不是數據表。并且在原商品表寫入一個同樣的商品(id相同,用于訂單查看,
此商品不可購買)
如果是數據表,為了控制超賣,需要對表進行行鎖,更新的時候帶上 where goods_amount 0。
如果是redis,使用 hincrby 一個負數來減庫存,并且 hincrby 會返回改變后的值,再來判斷返回值是否大于0,
因為redis每個命令都是原子性的,這樣不用鎖表就可控制超賣。
方法1、最常見的方法是:$_POST['fieldname'];
說明:只能接收Content-Type:
application/x-www-form-urlencoded提交的數據
解釋:也就是表單POST過來的數據
方法2、file_get_contents("php://input");
說明:
允許讀取
POST
的
原始數據
。
和
$HTTP_RAW_POST_DATA
比起來,它給內存帶來的壓力較小,并且不需要任何特殊的
php.ini
設置。
php://input
不能用于
enctype="multipart/form-data"。
解釋:
對于未指定
Content-Type
的POST數據,則可以使用file_get_contents(“php://input”);來獲取原始數據。
事實上,用PHP接收POST的任何數據都可以使用本方法。而不用考慮Content-Type,包括
二進制文件
流也可以。
所以用方法二是最保險的方法
方法3、$GLOBALS['HTTP_RAW_POST_DATA'];
說明:
總是產生
$HTTP_RAW_POST_DATA
變量包含有原始的
POST
數據。
此變量僅在碰到未識別
MIME
類型的數據時產生。
$HTTP_RAW_POST_DATA
對于
enctype="multipart/form-data"
表單數據不可用
如果post過來的數據不是PHP能夠識別的,可以用
$GLOBALS['HTTP_RAW_POST_DATA']來接收,
比如
text/xml
或者
soap
等等
解釋:
$GLOBALS['HTTP_RAW_POST_DATA']存放的是POST過來的原始數據。
$_POST或
$_REQUEST
存放的是
PHP以key=value的形式格式化以后的數據。
但$GLOBALS['HTTP_RAW_POST_DATA']中是否保存POST過來的數據取決于centent-Type的設置,即POST數據時
必須顯式示指明Content-Type:
application/x-www-form-urlencoded,POST的數據才會存放到
$GLOBALS['HTTP_RAW_POST_DATA']中