2017-09-30 3 views
5

Um es von Anfang an klar zu machen, habe ich die vollständige Zustimmung, dies durch den Website-Administrator zu tun, bis sie eine API erstellen.Einfache Verschrottung von Webseiten in PHP

Ich möchte sagen, eine Zahl oder ein beliebiges Stück Daten in einem bestimmten Teil der Website gefunden, obwohl es in der Zeile ändern kann.

Ein Beispiel von dem, was ich tun möchte, wenn ich das html in einer Variablen durch file_get_contents speichern und irgendwo in der Quelle finden wollte, wo es "<p>User status: Online.</p>" sagt; Ich würde den Text zwischen "status: " und ".</p>" in einer Variablen speichern müssen, nur diese beiden Strings zu wissen, um es zu finden, sondern auch, dass es nur ein mögliches Szenario, in dem diese beiden Texte sind in der gleichen Zeile

Vielen Dank für das Wissen, deine Zeit

EDIT: Ich scheine den wichtigsten Teil davon vergessen zu haben. Nun, die Frage ist, wie man das tut, was ich gerade beschrieben habe, wenn Sie viel Text haben, wie kann ich herausfinden, was zwischen einem Stück Text und einem anderen Stück Text ist, und es in einer Variablen speichern?

+3

** Also, was ist Ihre Frage? ** – ProEvilz

+1

Das war bemerkenswert dumm von mir, aktualisiert. – Markski

Antwort

4

Es gibt ein paar Möglichkeiten, um Websites zu kratzen, wäre eines zu verwenden CSS Selectors und ein anderes wäre, XPath zu verwenden, die beide Elemente aus dem DOM auswählen.

Da ich den vollen HTML-Code der Webseite nicht sehen kann, wäre es schwer für mich zu bestimmen, welche Methode für Sie besser ist. Es gibt eine andere Option, die vielleicht verpönt ist, aber in diesem Fall könnte es funktionieren.

Sie könnten eine Regex (regular expressions) verwenden, um die Zeichen zu finden, ich bin nicht die beste zu regulären Ausdrücken, aber hier ist ein Beispielcode, wie das funktionieren könnte:

<?php 

$subject = "<html><body><p>Some User</p><p>User status: Online.</p></body></html>"; 
$pattern = '/User status: (.*)\<\/p\>/'; 
preg_match($pattern, $subject, $matches); 
print_r($matches); 

?> 

Beispielausgabe:

Array 
(
    [0] => User status: Online.</p> 
    [1] => Online. 
) 

Im Prinzip stimmt die obige Regex mit einem Muster überein, in diesem Fall sucht sie nach der Zeichenfolge "User status:" und passt dann alle Zeichen (. *) Bis zum End-Absatz-Tag (escaped) an.

Hier ist das Muster, das nur „Online“ ohne die Zeit zurück, war nicht sicher, ob alle Zustände in einer Periode zu Ende, aber hier ist, wie es aussehen würde:

'/User status: (.*)\.\<\/p\>/' 
+0

Ich werde das versuchen, wenn ich kann, vielen Dank – Markski

+0

@Markski ya keine Sorgen! – Asleepace