Если вы используете Linux или что-то еще с помощью инструмента grep, вы можете просто запустить:
grep -Po 'http (s?): // [^ \ "() \ <>] *' sitemap.xml
Допустим, у меня есть sitemap.xml
файл с этими данными:
<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>
Я хочу извлечь все местоположения из него (данные между <loc>
и </loc>
).
Пример вывода будет как:
http://domain.com/pag1 http://domain.com/pag2 http://domain.com/pag3
Как это сделать?
Если вы используете Linux или что-то еще с помощью инструмента grep, вы можете просто запустить:
grep -Po 'http (s?): // [^ \ "() \ <>] *' sitemap.xml
Вы можете использовать скрипт Python здесь
Этот скрипт получает любые ссылки, начинающиеся с http
import re f = open('sitemap.xml','r') res = f.readlines() for d in res: data = re.findall('>(http:\/\/.+)<',d) for i in data: print i
И в вашем случае следующий скрипт найдет все данные в тегах
import re f = open('sitemap.xml','r') res = f.readlines() for d in res: data = re.findall('<loc>(http:\/\/.+)<\/loc>',d) for i in data: print i
Здесь хороший инструмент для игры с регулярным выражением, если вы не знакомы с ним.
если вам нужно загрузить удаленный файл, вы можете использовать следующий код
import urllib2 as ur import re f = ur.urlopen(u'http://server.com/sitemap.xml') res = f.readlines() for d in res: data = re.findall('<loc>(http:\/\/.+)<\/loc>',d) for i in data: print i
Это может быть выполнено с помощью одной команды sed, которая кажется более надежной, чем решение grep:
sed '/<loc>/!d; s/[[:space:]]*<loc>\(.*\)<\/loc>/\1/' inputfile > outputfile
(находится по адресу: linuxquestions.org )
Используя XSLT
, вы можете сделать это с помощьюXPath
/url/loc
The XSLT solution:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:s="http://www.sitemaps.org/schemas/sitemap/0.9"> <xsl:output method="text" /> <xsl:template match="s:url"> <xsl:value-of select="s:loc" /> <xsl:text> </xsl:text> </xsl:template> </xsl:stylesheet>