В качестве альтернативы BeautifulSoup
вы всегда можете использовать xml.etree.ElementTree
для анализа ваших URL-адресов XML, расположенных в теге loc
:
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)
, что дастследующие URL-адреса в списке:
['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']
Отсюда вы можете сгруппировать свою информацию в 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)
, что дает следующий defaultdict изсловари с индексами в качестве ключей:
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'}})
Если вы хотите вместо этого группировать по категориям, вы можете вместо этого использовать defaultdict списков:
data = defaultdict(list)
for outer in tree.getroot():
for inner in outer:
namespace, tag = inner.tag.split("}")
data[tag].append(inner.text)
pprint(data)
, что дает такую другую структуру:
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']})