wget Parsing-Tag-Skript

1

Ich versuche, eine Website zu sichern, die Seiten mit einem Tag wie diesem enthält:

<a id="12379-video"></a>
</div>

<script>
    jwplayer("12379-video").setup({
          file: "http://xyz.cloudfront.net/abc/moviename.mp4",
          flashplayer: "/sites/all/jwplayer/player.swf",
              stretching: "exactfit",
          height: 480,
          width: 640    });
</script></span>
  </div>
  1. Hat wgetextrahieren Sie die URL und folgt? (Und was sind die richtigen Parameter für den Befehl?)

  2. Was genau verwendet der Mechanismus wgetzum Parsen der abgerufenen Datei, um die URLs zu extrahieren?

  3. Gibt es eine Möglichkeit, dem Parser mitzuteilen, dass auch dieses Tag berücksichtigt werden soll? (mit regulären Ausdrücken oder ähnlichem)

  4. Welche anderen Strategien schlagen Sie vor, falls dies nicht möglich ist? (Skripten mit grepoder mit anderen unter Verwendung von Bash)

AndrewBloom
quelle
1
Warum machst du Backups mit wget? Wenn es sich um Ihren Webserver handelt, melden Sie sich an, um Ihre Sicherungen durchzuführen. Wenn es nicht Ihr Webserver ist, machen Sie kein "Backup".
David Richerby

Antworten:

0

Es gibt -p/ --page-requisitesparameter (mit -rzusammen), mit dem die meisten externen URLs heruntergeladen werden, die für die ordnungsgemäße Anzeige einer bestimmten HTML-Seite erforderlich sind (sofern sie nicht in der Robots-Datei ausgeschlossen sind).

Mehr dazu können Sie im Handbuch ( man wget) nachlesen :

Es ist wichtig zu wissen, dass Wgets Idee eines externen Dokumentlinks eine beliebige URL ist, die in einem <A>Tag, einem <AREA>Tag oder einem <LINK>anderen Tag als angegeben ist <LINK REL="stylesheet">.

Da Wget normalerweise nicht zwischen externen und inlinierten Dokumenten unterscheidet, verbleiben in der Regel "Blattdokumente", bei denen die erforderlichen Informationen fehlen.

Beachten Sie, dass Wget eine interne Tabelle mit HTML-Tags / Attribut-Paaren hat, die bei der Suche nach verknüpften Dokumenten während eines rekursiven Abrufs berücksichtigt werden. Verwenden Sie --follow-tags=list(durch Kommas getrennte Liste) gegenüber von, um eine hinzuzufügen --ignore-tags=list.

Diese Liste von Tags ist wahrscheinlich in definiert html-url.cund sieht folgendermaßen aus:

/* For tags handled by tag_find_urls: attributes that contain URLs to
   download. */
static struct {
  int tagid;
  const char *attr_name;
  int flags;
} tag_url_attributes[] = {
  { TAG_A,              "href",         ATTR_HTML },
  { TAG_APPLET,         "code",         ATTR_INLINE },
  { TAG_AREA,           "href",         ATTR_HTML },
  { TAG_BGSOUND,        "src",          ATTR_INLINE },
  { TAG_BODY,           "background",   ATTR_INLINE },
  { TAG_EMBED,          "href",         ATTR_HTML },
  { TAG_EMBED,          "src",          ATTR_INLINE | ATTR_HTML },
  { TAG_FIG,            "src",          ATTR_INLINE },
  { TAG_FRAME,          "src",          ATTR_INLINE | ATTR_HTML },
  { TAG_IFRAME,         "src",          ATTR_INLINE | ATTR_HTML },
  { TAG_IMG,            "href",         ATTR_INLINE },
  { TAG_IMG,            "lowsrc",       ATTR_INLINE },
  { TAG_IMG,            "src",          ATTR_INLINE },
  { TAG_INPUT,          "src",          ATTR_INLINE },
  { TAG_LAYER,          "src",          ATTR_INLINE | ATTR_HTML },
  { TAG_OBJECT,         "data",         ATTR_INLINE },
  { TAG_OVERLAY,        "src",          ATTR_INLINE | ATTR_HTML },
  { TAG_SCRIPT,         "src",          ATTR_INLINE },
  { TAG_TABLE,          "background",   ATTR_INLINE },
  { TAG_TD,             "background",   ATTR_INLINE },
  { TAG_TH,             "background",   ATTR_INLINE }
};
Kenorb
quelle
dies beantwortet die Punkte 2 und 3. AFAI versteht, die Antwort auf Punkt 1 ist nein. Für Punkt 4 werde ich versuchen, die Links mit grep zu extrahieren und sie an wget weiterzugeben. Ich frage mich, ob dies mit dem Parsen von Javascript in wget für dynamisch generierte Inhalte zusammenhängt.
AndrewBloom