Wie navigiere ich mit WGET durch die PHP-basierte Paginierung?

Wie navigiere ich mit WGET durch die PHP-basierte Paginierung?

Ich versuche, eine Liste mit möglichen Namen für unseren nächsten kleinen Jungen zusammenzustellen und habe die Website durchgesehenIndienElternschaft. Zu jedem Namen auf der Site gibt es eine Detailseite mit einer URL wie dieser http://www.indiaparenting.com/babynames/meaning-of-Aadesh.shtml. Ich möchte, dass der Name dem unseres Erstgeborenen ähnelt und versuche Folgendes zu erreichen:

  • WGET alle Seiten der Site, die "meaning-of" enthalten, in einen einzelnen Ordner auf meiner Festplatte, mit etwas wiewget -nc -c -nd -r -l1 -k http://www.indiaparenting.com/babynames/hindu-boy-names.php -A "meaning-of*" -I /babynames
  • Machen Sie etwas, dir > filenames.txtindem Sie beispielsweise alles in eine einzige Textdatei packen.
  • Analysieren Sie die generierte Datei nach einem bestimmten regulären Ausdruck, um mögliche Namen zu finden. Der Name des ersten Sohns ist Ranveer und wir suchen nach Namen, die mit N oder R beginnen. Der reguläre Ausdruck sieht also wahrscheinlich so aus: [NR][aeiou][^aeiou][^aeiou][aeiou]{2}[^aeiou].
  • Gehen Sie die endgültige Liste manuell mit der Dame durch und wählen Sie einen Namen aus!

Das Problem, das ich habe, betrifft das wget. Die Seite wird mit PHP erstellt und unten befindet sich ein Seitennavigator, der nicht wie üblich auf die URL einer anderen Seite verweist:

Paging-Abschnitt

Ich habe nachgeschaut und die JS-Paging-Funktion gefunden:

function pagingFunction(labelName){         
    vpage = document.getElementById("pageNum");     
    pageNm = labelName;         
    vpage.value = pageNm;
    document.getElementById("frmPaging").submit();      
}

Frage: Ich hatte gedacht, dass die Seiten beim rekursiven WGET seitenweise durchgegangen würden, aber das ist nicht der Fall. Gibt es eine Möglichkeit, dies mit WGET zu handhaben? Wenn nicht, gibt es eine andere Option?


Weitere Informationen: Ich habe darüber nachgedacht, eine Liste auf Basis des regulären Ausdrucks zu erstellen, aber sie wäre zu lang und hätte ohnehin zu viele ungültige Namen, weshalb ich sie auf Basis tatsächlicher Namen von einer dieser Babynamen-Websites erstellen möchte. Ich werde die Website auch kontaktieren, um zu sehen, ob sie einfach eine Abfrage in ihrer Datenbank ausführen und die Namen für mich in eine Datei schreiben können, und wenn alles andere fehlschlägt, gibt es andere Websites, die man sich ansehen kann.

Antwort1

Diese Site hat ein besonders merkwürdiges Design. Nur ein Hinweis: PHP macht hier keinen Unterschied.

Es sieht so aus, als würden sie Seiten mit der folgenden Methode laden:

  1. Wenn Sie auf den Link klicken, wird JS ausgeführt.
  2. Dieses JS füllt ein verstecktes Formular mit der Seitenzahl aus.
  3. Anschließend übermittelt das Skript das Formular, das wiederum eine POST-Anfrage an den Server sendet.
  4. Der Server antwortet direkt mit der entsprechenden Seite.

Sie haben hier mehrere Möglichkeiten. Am einfachsten ist es, einfach eine wgetAnfrage --post-datain einer Schleife zu schreiben, um alle Seiten von 1 bis n abzurufen. Lesen Sie in der Dokumentation und im Netzwerkmonitor Ihres Browsers nach, um herauszufinden, was die eigentliche Anfrage ist. Der Netzwerkmonitor von Firefox gibt beispielsweise Folgendes als Anfragetext an:

Content-Type: application/x-www-form-urlencoded
Content-Length: 145

pagingQuery=select+*+from+tblbabynames+where+++religion%3D%27hindu%27+and+gender%3D%27M%27+limit+0%2C30&totalRows=3097&pageNum=2&searchResultNo=0

pageNum=2Sie können das wahrscheinlich in einer Schleife ersetzen .

Eine aufwändigere Methode wäre die Verwendung eines Browser-Automatisierungs-Toolkits wie Selenium, um buchstäblich durch zu navigieren undklickendie Links und aktiviert das JS genau wie ein Mensch es tun würde.

verwandte Informationen