2016-08-20 7 views
0

Ich versuche, den Wert eines versteckten Eingabefeldes von twitters folgen Seite. Ich benutze file_get_contents auf der URL und versuche dann, den Wert der Eingabe mit der Funktion preg_match_all zu erhalten, aber etwas in meinem Code funktioniert nicht, weil ich nur ein leeres Array zurückbekomme. Ich würde es wirklich schätzen, wenn jemand über meinen Code schauen würde und mir helfen würde, ihn zur Arbeit zu bringen.Erhalten Wert des Eingabefeldes von anderen Webseiten HTML-Code

HTML-Code des Eingabefeldes I (in diesem Beispiel twitter) den Wert von erhalten möchten

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

Mein Code-Schnipsel ich nicht bekommen

$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>"; 

Diese arbeiten Code sollte den Wert des Eingabefeldes in diesem Beispiel nur twitter innerhalb eines Arrays ausgeben.

Edit: Meine Code-Schnipsel Werke finden ich nur noch nicht bemerkt, dass Twitter zeigt nur dieses versteckte Eingabefeld, wenn Ihr Login auf Twitter und natürlich, wenn Sie file_get_contents Ihr Webserver verwenden, nicht bei Twitter angemeldet sein, und kann nicht den HTML-Code bekommen, was Sie erhalten, wenn Sie eingeloggt sind. Danke an vigikaran für das Hinweisen auf mich und gilbert für die Verbesserung der Regex in meinem Code-Snippet.

+0

enthält die Variable '$ html 'irgendwelche Daten nach der Verwendung von' file_get_contents'? – RamRaider

+0

haben Sie zuerst das file_get_content-Ergebnis überprüft? – Vigikaran

+0

Ja, ich überprüfe, und es enthält den Quellcode, aber nach der Verwendung von preg_match_all bekomme ich nur ein leeres Array mit 2 anderen leeren Arrays. – Truzze

Antwort

1

Danke an vigikaran für diesen Hinweis zu mir mein Code ist in Ordnung und funktioniert, aber der HTML-Code, den ich von twitter bekam, enthält nicht das versteckte Eingabefeld, das ich suchte, weil es nur zeigt Dieses Eingabefeld, wenn Sie eingeloggt sind Wenn du file_get_contents verwendest, wird dein Webserver nicht eingeloggt. Danke an alle für die Hilfe und an gilbert für die Verbesserung der Regex von meinem Code-Snippet.

+0

Gern geschehen. Screen Scraping ist immer ein riskantes Geschäft, da sich Seiten so oft ändern. – Gilbert

2

Dies ist für mich arbeiten:

$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>"; 

Sie hier https://eval.in/626194

Der String ist in $screen_name[1][0]

+0

Das klappt auch in meinem Fall – Satty

+0

Funktioniert auch bei mir habe ich gerade nicht gemerkt du musst bei Twitter eingeloggt sein Dieses versteckte Eingabefeld und Ihr Webserver, der den Code mit file_get_content erhält, werden nicht eingeloggt. – Truzze

2

ohne tatsächlich eine Twitter-Seite packte ich bemerken, dass Ihr regulärer Ausdruck ist anfällig überprüfen können, zusätzlicher Leerraum innerhalb von HTML-Tags. Dies kann ein echtes Problem beim Screen Scraping sein. Versuchen:

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

oder wenn Sie eine bessere Möglichkeit haben wollen, die folgende kleine Änderungen an Twitters Teil zu widerstehen können arbeiten, solange Name = Wert vorausgeht =:

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

(bearbeitet oben zu verbessern Resistance to white-space changes)

Verwandte Themen