2016-08-20 157 views
0

我試圖從twitters關注頁面獲取隱藏輸入字段的值。我在url上使用file_get_contents,然後嘗試使用preg_match_all函數獲取輸入的值,但是我的代碼中的某些內容不起作用,因爲我只是返回一個空數組。如果有人會查看我的代碼並幫助我實現它,我將非常感激。從其他網站獲取輸入字段的值html代碼

輸入字段我想從價值(在這個例子中嘰嘰喳喳)的HTML代碼

<input type="hidden" name="screen_name" value="twitter"> 

我的代碼片段,我不上班

$html = file_get_contents($url); 
preg_match_all("/<input type=\"hidden\" name=\"screen_name\" value=\"(.*?)\">/", $html, $screen_name); 
echo "<pre>", print_r($screen_name, true), "</pre>"; 

這代碼應在此示例中輸出輸入字段的值,只需在數組中輸入twitter

編輯:我的代碼片段的作品找到我只是還沒有注意到,Twitter的只能說明這個隱藏輸入字段,如果您登錄Twitter上,當然,如果你使用的file_get_contents你的服務器不會被記錄到Twitter和如果您已登錄,將無法獲取您獲得的HTML代碼。感謝vigikaran指出了我和gilbert,以改善我的代碼段中的正則表達式。

+0

使用'file_get_contents'後變量'$ html'是否包含任何數據? – RamRaider

+0

你是否先檢查file_get_content結果? – Vigikaran

+0

是的,我檢查,它包含源代碼,但使用preg_match_all後,我得到的是一個空數組,其中有2個其他空數組。 – Truzze

回答

1

感謝vigikaran指出這對我來說我的代碼是好的,但工作,但我從Twitter獲得的HTML代碼不包含我正在尋找的隱藏輸入字段,因爲它只顯示這個輸入字段,如果你登錄和cou rse如果你使用file_get_contents你的web服務器將不會被登錄。感謝大家的幫助和gilbert從我的代碼片段改進正則表達式。

+0

不客氣。由於頁面經常變化,因此屏幕抓取一直是一項有風險的業務。 – Gilbert

2

這是爲我工作:

$html = '<input type="hidden" name="screen_name" value="twitter">'; 
    preg_match_all('/<input type=\"hidden\" name=\"screen_name\" value=\"(.*?)\">/', $html, $screen_name); 
    echo "<pre>", print_r($screen_name, true), "</pre>"; 

您可以點擊此處查看https://eval.in/626194

的字符串是$screen_name[1][0]

+0

這也適用於我的情況 – Satty

+0

也適用於我我只是沒有注意到你必須登錄到微博要獲得這個隱藏的輸入字段,您的web服務器將獲得與file_get_content代碼將不會登錄。 – Truzze

2

沒有真正抓住一個Twitter頁面,我注意到你的正則表達式容易在html標籤中額外的空白。這可能是一個真正的屏幕抓取問題。嘗試:

'/<input\s+type="hidden"\s+name="screen_name"\s+value="(.*?)">/', 

,或者如果你想有一個更好的抵禦Twitter的部分小的變化,只要名稱=之前的值下面的工作能力=:

'/<input\s+[^<>]*\s+name\s*=\s*"screen_name"[^<>]*\s+value\s*=\s*"(.*?)">/', 

(上面編輯,以提高抵抗空白變化)