As an alternative to BeautifulSoup, you can always use xml.etree.ElementTree to parse your XML urls located at the loc tag:
from requests import get
from xml.etree.ElementTree import fromstring, ElementTree
from pprint import pprint
url = 'https://launch.toytokyo.com/sitemap_pages_1.xml'
req = get(url)
tree = ElementTree(fromstring(req.text))
urls = []
for outer in tree.getroot():
for inner in outer:
namespace, tag = inner.tag.split("}")
if tag == 'loc':
urls.append(inner.text)
pprint(urls)
Which will give the following URLs in a list:
['https://launch.toytokyo.com/pages/about',
'https://launch.toytokyo.com/pages/help',
'https://launch.toytokyo.com/pages/terms',
'https://launch.toytokyo.com/pages/visit-us']
From this, you can group your info into a collections.defaultdict:
from requests import get
from xml.etree.ElementTree import fromstring, ElementTree
from collections import defaultdict
from pprint import pprint
url = 'https://launch.toytokyo.com/sitemap_pages_1.xml'
req = get(url)
tree = ElementTree(fromstring(req.text))
data = defaultdict(dict)
for i, outer in enumerate(tree.getroot()):
for inner in outer:
namespace, tag = inner.tag.split("}")
data[i][tag] = inner.text
pprint(data)
Which gives the following defaultdict of dictionaries with indices as keys:
defaultdict(<class 'dict'>,
{0: {'changefreq': 'weekly',
'lastmod': '2018-07-26T14:37:12-07:00',
'loc': 'https://launch.toytokyo.com/pages/about'},
1: {'changefreq': 'weekly',
'lastmod': '2018-11-26T07:58:43-08:00',
'loc': 'https://launch.toytokyo.com/pages/help'},
2: {'changefreq': 'weekly',
'lastmod': '2018-08-02T08:57:58-07:00',
'loc': 'https://launch.toytokyo.com/pages/terms'},
3: {'changefreq': 'weekly',
'lastmod': '2018-05-21T15:02:36-07:00',
'loc': 'https://launch.toytokyo.com/pages/visit-us'}})
If you wish to instead group by categories, then you can use a defaultdict of lists instead:
data = defaultdict(list)
for outer in tree.getroot():
for inner in outer:
namespace, tag = inner.tag.split("}")
data[tag].append(inner.text)
pprint(data)
Which gives this different structure:
defaultdict(<class 'list'>,
{'changefreq': ['weekly', 'weekly', 'weekly', 'weekly'],
'lastmod': ['2018-07-26T14:37:12-07:00',
'2018-11-26T07:58:43-08:00',
'2018-08-02T08:57:58-07:00',
'2018-05-21T15:02:36-07:00'],
'loc': ['https://launch.toytokyo.com/pages/about',
'https://launch.toytokyo.com/pages/help',
'https://launch.toytokyo.com/pages/terms',
'https://launch.toytokyo.com/pages/visit-us']})