重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
方法1、最常見的方法是:$_POST['fieldname'];
創新互聯-專業網站定制、快速模板網站建設、高性價比射洪網站開發、企業建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式射洪網站制作公司更省心,省錢,快速模板網站建設找我們,業務覆蓋射洪地區。費用合理售后完善,十多年實體公司更值得信賴。
說明:只能接收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']中
訪問需要采集的頁面,如果數據是用js輸出的html,那么必定有接口或者本身頁面中給js提供了數據,來遍歷輸出html。
用chrome的審查元素中的network,可以單獨看xhr,看看是否是ajax請求的接口,如果數據是從接口來的,直接用PHP去獲取那個接口的數據就可以了。
如果沒有ajax請求,查看html源代碼,在里面找數據。
問題其實不難,自己都能寫。給你幾個思路吧:
1.在百度知道中,輸入linux,然后會出現列表。復制瀏覽器地址欄內容。
然后翻頁,在復制地址欄內容,看看有什么不同,不同之處,就是你要循環分頁的i值。
當然這個是笨方法。
2.使用php的file或者file_get_contents函數,獲取鏈接URL的內容。
3.通過php正則表達式,獲取你需要的3個字段內容。
4.寫入數據庫。
需要注意的是,百度知道有可能做了防抓取的功能,你剛一抓幾個頁面,可能會被禁止。
建議也就抓10頁數據。
其實不難,你肯定寫的出來。 還有,網上應該有很多抓取工具,你找找看,然后將抓下來的數據
在做分析。寫入數據庫。
這個需要配合js,打開一個html頁面,首先js用ajax請求頁面,返回第一個頁面信息確定處理完畢(ajax有強制同步功能),ajax再訪問第二個頁面。(或者根據服務器狀況,你可以同時提交幾個URL,跑幾個相同的頁面)
參數可以由js產生并傳遞url,php后臺頁面根據URL抓頁面。然后ajax通過php,在數據庫或者是哪里設一個標量,標明檢測到哪里。由于前臺的html頁面執行多少時候都沒問題,這樣php的內存限制和執行時間限制就解決了。
因為不會浪費大量的資源用一個頁面來跑一個瞬間500次的for循環了。(你的500次for循環死了原因可能是獲取的數據太多,大過了php限制的內存)
不過印象中curl好像也有強制同步的選項,就是等待一個抓取后再執行下一步。但是這個500次都是用一個頁面線程處理,也就是說肯定會遠遠大于30秒的默認執行時間。
簡單的分了幾個步驟:
1、確定采集目標
2、獲取目標遠程頁面內容(curl、file_get_contents)
3、分析頁面html源碼,正則匹配你需要的內容(preg_match、preg_match_all),這一步最為重要,不同頁面正則匹配規則不一樣
4、入庫
通過網頁表單獲取的數據,在php文件中呈現,利用php方法中的$_GET方法接受,提交的數據為一個字典。
1、通過輸入網址請求服務器中的html文件,服務器接受請求文件,進行處理
2、服務器接收后,處理成響應報文進行返回到用戶瀏覽器界面
3、第二次在html的表單中提交的數據會形成請求報文到服務器中,php文件接受數據并進行處理
4、服務器中php文件接收后會處理并返回響應文件呈現到用戶瀏覽器界面
將form表單中的method的取值改成post就是以post的方式將文件放給服務器。
1、相同點
2、不同點