Wget Mirror sollte XML als HTML behandeln

401
Angelo Fuchs

Ich möchte einen Spiegel einer Site erstellen, die eine dynamische Sitemap in XML-Form hat.

Natürlich möchte ich, dass diese Sitemap heruntergeladen und verarbeitet wird, als wäre es eine HTML-Datei.

Ich habe das -FFlag für diese Datei ausprobiert, aber es hat nicht funktioniert, da es keine URLs in der Datei gefunden hat.

Derzeit gehe ich davon aus, dass dies nicht so funktionieren wird (weil wget nicht für xml ist), wollte aber fragen, ob ich etwas übersehen möchte.

Der Inhalt der XML-Datei sieht folgendermaßen aus:

<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="http://MY_SITE/wp-content/plugins/google-sitemap-generator/sitemap.xsl"?><!-- sitemap-generator-url="http://www.arnebrachhold.de" sitemap-generator-version="4.0.8" --> <!-- generated-on="June 11, 2017 6:05 pm" --> <sitemapindex xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/siteindex.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <sitemap> <loc>http://MY_SITE/sitemap-misc.xml</loc> <lastmod>2017-05-31T20:49:06+00:00</lastmod> </sitemap> <sitemap> <loc>http://MY_SITE/sitemap-pt-post-2017-04.xml</loc> <lastmod>2017-04-12T16:27:52+00:00</lastmod> </sitemap> <sitemap> <loc>http://MY_SITE/sitemap-pt-post-2017-02.xml</loc> <lastmod>2017-02-10T17:50:14+00:00</lastmod> </sitemap> [...] </sitemapindex> 

Und jede Subsitemap mag dann:

<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="http://MY_SITE/wp-content/plugins/google-sitemap-generator/sitemap.xsl"?><!-- sitemap-generator-url="http://www.arnebrachhold.de" sitemap-generator-version="4.0.8" --> <!-- generated-on="June 11, 2017 6:07 pm" --> <urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url> <loc>http://MY_SITE/32017-SOME_CONTENT/</loc> <lastmod>2017-04-12T16:27:52+00:00</lastmod> <changefreq>weekly</changefreq> <priority>0.8</priority> </url> <url> <loc>http://MY_SITE/32017-SOME_OTHER_CONTENT/</loc> <lastmod>2017-04-12T16:24:25+00:00</lastmod> <changefreq>weekly</changefreq> <priority>0.8</priority> </url> </urlset> 
1

2 Antworten auf die Frage

1
Esa Jokinen

Ihr Problem ist, dass es im Gegensatz zu Links in HTML wget -rnicht möglich ist, Links in XML zu folgen. Sie können dies umgehen, indem Sie zuerst die Sitemap abrufen, alle darin enthaltenen URLs finden und schließlich mit einer anderen abrufen wget, z.

wget --quiet http://example.com/sitemap.xml --output-document - \ | egrep -o "http://example\.com[^<]+" \ | wget -i - --wait 0 

Hier ist der Schlüssel

-i file

--input-file=file

Liest URLs aus einer lokalen oder externen Datei. Wenn -als Datei angegeben wird, werden URLs aus der Standardeingabe gelesen. (Verwenden Sie ./-diese Option, um aus einer Datei zu lesen, die buchstäblich mit einem Namen bezeichnet wird -.) Wenn diese Funktion verwendet wird, müssen in der Befehlszeile keine URLs vorhanden sein. Wenn sich sowohl in der Befehlszeile als auch in einer Eingabedatei URLs befinden, werden die in den Befehlszeilen zuerst abgerufen. Wenn --force-htmlnicht angegeben, sollte die Datei aus einer Reihe von URLs bestehen, einer pro Zeile.

Wir bieten diese "Datei" aus der Standardeingabe an, nachdem das XML in die gewünschte Form geändert wurde, dh eine URL pro Zeile egrep.

0
Pak

Wenn die Site die Sitemap als HTML anzeigt, Ihnen aber als XML zurückgibt, fehlt wahrscheinlich eine .xsl- oder .xslt-Datei (eXtensible Stylesheet Language Transformation). Dadurch wird festgelegt, wie die XML-Datei tatsächlich angezeigt wird. In diesem Fall wahrscheinlich in Form von HTML. Wenn Sie das herunterladen und anzeigen, produziert es wahrscheinlich das, wonach Sie suchen. Alternativ können Sie XSLT lernen und Ihr eigenes schreiben.

Nein, es gibt keine HTML-Anzeige. Dies ist ein XML-Format, sodass Google Ihre Seite schneller indizieren kann. Ich werde ein Beispiel in meiner Frage bearbeiten. Angelo Fuchs vor 6 Jahren 0