Wget mirror должен воспринимать xml как html

310
Angelo Fuchs

Я хочу сделать зеркало сайта, который имеет динамическую карту сайта в форме XML.

Конечно, я хочу, чтобы этот файл сайта загружался и обрабатывался так, как если бы это был HTML-файл.

Я попробовал -Fпометить этот файл, но он не сработал, сказав, что он не нашел URL-адресов внутри файла.

В настоящее время я предполагаю, что это не будет работать таким образом (потому что wget не для xml), но хотел попросить убедиться, что я ничего не пропускаю.

Содержание xml выглядит так:

<?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> 

И каждая дочерняя карта тогда вроде:

<?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 ответа на вопрос

1
Esa Jokinen

Ваша проблема в том, что в отличие от ссылок в HTML, wget -rне может переходить по ссылкам в XML. Вы можете обойти это, сначала извлекая карту сайта, находя все URL-адреса в ней и, наконец, извлекая их с помощью другого wget, например:

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

Здесь ключ

-i file

--input-file=file

Чтение URL-адресов из локального или внешнего файла. Если -указано как файл, URL считываются из стандартного ввода. (Используйте ./-для чтения из файла с буквальным именем -.) Если используется эта функция, в командной строке не нужно указывать URL-адреса. Если в командной строке и во входном файле есть URL-адреса, они будут получены первыми. Если --force-htmlне указано иное, файл должен состоять из серии URL-адресов, по одному на строку.

Мы предлагаем этот «файл» из стандартного ввода после изменения XML в желаемую форму, т.е. по одному URL на строку с egrep.

0
Pak

Если сайт отображает карту сайта в формате HTML, но возвращает его в виде XML, вероятно, отсутствует файл .xsl или .xslt (eXtensible Stylesheet Language Transformation). Это определяет, как на самом деле отображается файл XML; в этом случае, вероятно, в виде HTML. Если вы загрузите это и отобразите, оно, вероятно, даст то, что вы ищете. Кроме того, вы можете изучить XSLT и написать свой собственный.

Нет, нет отображения HTML. Это формат xml, так что Google может быстрее проиндексировать вашу страницу. Я отредактирую пример в моем вопросе. Angelo Fuchs 6 лет назад 0

Похожие вопросы