Powiedzmy, że mam sitemap.xml
plik z tymi danymi:
<url>
<loc>http://domain.com/pag1</loc>
<lastmod>2012-08-25</lastmod>
<changefreq>weekly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>http://domain.com/pag2</loc>
<lastmod>2012-08-25</lastmod>
<changefreq>weekly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>http://domain.com/pag3</loc>
<lastmod>2012-08-25</lastmod>
<changefreq>weekly</changefreq>
<priority>0.9</priority>
</url>
Chcę wyodrębnić z niego wszystkie lokalizacje (dane pomiędzy <loc>
i </loc>
).
Przykładowe dane wyjściowe będą takie jak:
http://domain.com/pag1
http://domain.com/pag2
http://domain.com/pag3
Jak to zrobić?
Odpowiedzi:
Tutaj możesz użyć skryptu python
Skrypt ten uruchamia wszelkie linki rozpoczynające się od http
W twoim przypadku następny skrypt znajdzie wszystkie dane zawinięte w tagi
Oto fajne narzędzie do gry z wyrażeniem regularnym, jeśli go nie znasz.
jeśli chcesz załadować plik zdalny, możesz użyć następnego kodu
źródło
http://server.com/sitemap.xml
. Nie jestem tak znany Pythonowif = open('sitemap.xml','r')
przy otwieraniu pliku, jak otworzyć zdalny plik na serwerze http?AttributeError: 'list' object has no attribute 'findall'
Jeśli korzystasz z Linux-a lub czegoś z narzędziem grep , możesz po prostu uruchomić:
źródło
grep -Po 'http(s?)://[^ \"()\<>]*' sitemap.xml > links.txt
Można to osiągnąć za pomocą pojedynczego polecenia sed, które wydaje się być bardziej solidne niż rozwiązanie grep:
(znaleziony na: linuxquestions.org )
źródło
Za pomocą
XSLT
możesz to wyrenderowaćXPath
źródło
Rozwiązanie XSLT:
źródło