2016-08-20 149 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*"(.*?)">/', 

(上面编辑,以提高抵抗空白变化)