webdevqa.jp.net

サイトマップ(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

これを行う方法?

5
Akshat Mittal

ここで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
2
Ishikawa Yoshi

Linuxボックスなど、 grep ツールを使用している場合は、次のコマンドを実行できます。

grep -Po'http(s?):// [^\"()\ <>] * 'sitemap.xml

9
bobmagoo

これは、単一のsedコマンドで実行できます。これは、grepソリューションよりも堅実であるようです。

sed '/<loc>/!d; s/[[:space:]]*<loc>\(.*\)<\/loc>/\1/' inputfile > outputfile

(次の場所にあります: linuxquestions.org

2
LarS

XSLTを使用すると、XPathでレンダリングできます。

/url/loc
1
Siva Charan

XSLTソリューション:

<?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>
0
Jan Tomka