从站点地图(xml)中提取链接

Aks*_*tal 5 url xml sitemap extract

假设我有一个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>
Run Code Online (Sandbox Code Playgroud)

我想从中提取所有位置(<loc>和之间的数据</loc>)。

示例输出如下:

http://domain.com/pag1
http://domain.com/pag2
http://domain.com/pag3
Run Code Online (Sandbox Code Playgroud)

这该怎么做?

小智 9

如果你在 Linux 机器上或使用grep工具的东西,你可以运行:

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


Ish*_*shi 2

您可以在此处使用 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
Run Code Online (Sandbox Code Playgroud)

在您的情况下,下一个脚本会查找标签中包含的所有数据

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
Run Code Online (Sandbox Code Playgroud)

如果您不熟悉正则表达式,这里是一个很好的工具。

如果您需要加载远程文件,您可以使用下一个代码

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
Run Code Online (Sandbox Code Playgroud)