Skip to content

Instantly share code, notes, and snippets.

@vadimkantorov
Last active February 23, 2024 23:29
Show Gist options
  • Save vadimkantorov/6d6875a520a5d6351b5242b3b87a641a to your computer and use it in GitHub Desktop.
Save vadimkantorov/6d6875a520a5d6351b5242b3b87a641a to your computer and use it in GitHub Desktop.
Print all URLs of a standardized XML sitemap
# https://sitemaps.org/protocol.html
import sys
import xml.dom.minidom
import urllib.request
def sitemapindex_urlset_concat(url):
sitemapindex = xml.dom.minidom.parse(urllib.request.urlopen(url))
for sitemap in sitemapindex.getElementsByTagName('sitemap'):
urlset = xml.dom.minidom.parse(urllib.request.urlopen(sitemap.getElementsByTagName('loc')[0].firstChild.nodeValue))
for url in urlset.getElementsByTagName('url'):
yield url.getElementsByTagName('loc')[0].firstChild.nodeValue
def sitemap_urlset_read(fp):
node_doc = xml.dom.minidom.parse(fp)
assert node_doc.documentElement.nodeName == 'urlset'
return [{n.nodeName : ''.join(nn.nodeValue for nn in n.childNodes if nn.nodeType == nn.TEXT_NODE) for n in node_url.childNodes if n.nodeType == n.ELEMENT_NODE} for node_url in node_doc.documentElement.getElementsByTagName('url')]
def sitemap_urlset_write(urlset, fp):
node_doc = xml.dom.minidom.Document()
node_root = node_doc.appendChild(node_doc.createElement('urlset'))
node_root.setAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance')
node_root.setAttribute('xsi:schemaLocation', 'http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd')
node_root.setAttribute('xmlns', 'http://www.sitemaps.org/schemas/sitemap/0.9')
for entry in urlset:
node_url = node_root.appendChild(node_doc.createElement('url'))
for field, value in entry.items():
node_url.appendChild(node_doc.createElement(field)).appendChild(node_doc.createTextNode(str(value)))
node_doc.writexml(fp, addindent = ' ', newl = '\n')
if __name__ == '__main__':
#print('\n'.join(sitemapindex_urlset_concat('https://russie-libertes.org/sitemap.xml')))
sitemap_path = 'sitemap.xml'
urlset = [
dict(loc = 'http://www.example.com/1', lastmod = '2004-11-23'),
dict(loc = 'http://www.example.com/2', lastmod = '2004-11-24')
]
with open(sitemap_path, 'w') as f:
sitemap_urlset_write(urlset, f)
with open(sitemap_path, 'r') as f:
print(sitemap_urlset_read(f))
https://russie-libertes.org/
https://russie-libertes.org/index.php/2023/01/30/conference-les-voies-de-depoutinisation-de-la-russie/
https://russie-libertes.org/index.php/2023/01/21/des-russes-sopposent-a-la-guerre-en-ukraine/
https://russie-libertes.org/index.php/2023/01/14/manifestation-en-soutien-a-navalny-et-toutes-les-victimes-du-regime-poutinien/
https://russie-libertes.org/index.php/2023/01/03/la-paix-en-europe-ne-sera-garantie-quapres-la-depoutinisation-de-la-russie/
https://russie-libertes.org/index.php/2022/11/28/rendons-chauffage-ukraine/
https://russie-libertes.org/index.php/2022/11/11/exposition-dis-la-guerre/
https://russie-libertes.org/index.php/2022/10/28/2012-2022-retour-sur-une-decennie-de-luttes-pour-la-liberte-et-de-repressions-en-russie/
https://russie-libertes.org/index.php/2022/10/08/le-forum-face-a-la-guerre-menee-par-le-kremlin-a-eu-lieu/
https://russie-libertes.org/index.php/2022/09/26/signez-notre-petition-lunion-europeenne-doit-proteger-les-russes-qui-fuient-les-repressions-et-la-mobilisation/
https://russie-libertes.org/index.php/2022/09/14/face-a-la-guerre-menee-par-le-kremlin-forum-des-resistances-en-europe-7-octobre-2022/
https://russie-libertes.org/index.php/2022/08/30/6-mois-de-guerre-apres-lattaque-du-24-fevrier/
https://russie-libertes.org/index.php/2022/08/18/pour-un-renforcement-des-sanctions-contre-les-soutiens-de-la-guerre-menee-par-le-regime-russe-en-ukraine-et-un-statut-special-protegeant-les-opposants-a-cette-guerre/
https://russie-libertes.org/index.php/2022/08/11/ilya-yashin-prisonnier-pour-la-liberte/
https://russie-libertes.org/index.php/2022/07/19/russians-against-war-international-action-day-24-july/
https://russie-libertes.org/index.php/2022/06/30/en-russie-de-multiples-voix-de-femmes-contre-la-guerre/
https://russie-libertes.org/index.php/2022/06/24/forum-pour-une-russie-en-paix/
https://russie-libertes.org/index.php/2022/06/20/gazprom-la-machine-a-milliards-de-poutine-et-ses-amis/
https://russie-libertes.org/index.php/2022/06/13/les-peuples-se-revoltent-quand-lespoir-se-montre/
https://russie-libertes.org/index.php/2022/06/07/russians-against-war-international-action-day-12-juin/
https://russie-libertes.org/index.php/2022/06/07/nous-citoyens-russes-vivant-en-france-avons-le-devoir-dagir-et-de-nous-engager-contre-la-guerre-en-ukraine/
https://russie-libertes.org/index.php/2022/05/17/russie-libertes-10-ans-de-combats/
https://russie-libertes.org/index.php/2022/05/13/mobilisations-anti-guerre-pour-le-9-mai/
https://russie-libertes.org/index.php/2022/05/02/nous-russie-libertes-et-lunion-des-ukrainiens-de-france-appelons-en-urgence-la-france-a-se-mobiliser-de-facon-ferme-et-solidaire-afin-de-stopper-les-importations-dhydrocarbures-rus/
https://russie-libertes.org/index.php/2022/04/26/replay-de-la-conference-russie-la-censure-de-guerre-tue/
https://russie-libertes.org/index.php/2022/03/31/conference-20-avril-2022-a-paris-russie-la-censure-de-guerre-tue/
https://russie-libertes.org/index.php/2022/03/23/boycott-gazprom/
https://russie-libertes.org/index.php/2022/03/14/signez-la-petition-guerre-en-ukraine-pour-des-sanctions-contre-les-complices-de-poutine-en-europe/
https://russie-libertes.org/index.php/2022/02/27/signez-la-petition-pour-une-enquete-judiciaire-sur-les-crimes-commis-par-vladimir-poutine/
https://russie-libertes.org/index.php/2022/02/24/non-a-la-guerre-de-poutine/
https://russie-libertes.org/index.php/2022/01/25/non-aux-menaces-du-kremlin-contre-lukraine-non-a-la-guerre/
https://russie-libertes.org/index.php/2022/01/17/manifestation-a-paris-pour-la-liberation-de-navalny-un-an-apres-son-emprisonnement-en-russie/
https://russie-libertes.org/index.php/2021/11/30/ils-font-vivre-le-journalisme-en-russie/
https://russie-libertes.org/index.php/2021/10/30/le-20-octobre-2021-sest-tenue-a-lhotel-de-ville-de-paris-la-conference-15-ans-sans-anna-une-parole-libre-est-elle-encore-possible-en-russie/
https://russie-libertes.org/index.php/2021/09/27/15-ans-sans-anna-politkovskaia-une-parole-libre-est-elle-encore-possible-en-russie/
https://russie-libertes.org/index.php/2021/09/22/russie-des-elections-falsifiees-qui-rendent-impossible-la-reconnaissance-du-resultat/
https://russie-libertes.org/index.php/2021/09/17/comment-le-kremlin-verrouille-les-elections-en-russie/
https://russie-libertes.org/index.php/2021/08/25/1-an-apres-la-tentative-dassassinat-dalexei-navalny/
https://russie-libertes.org/index.php/2021/05/30/pour-la-liberation-de-roman-protasevich-et-sofia-sapega/
https://russie-libertes.org/index.php/2021/05/04/rassemblement-en-soutien-a-la-societe-civile-russe/
https://russie-libertes.org/index.php/2021/04/05/alexei-navalny-en-danger-signez-la-petition-pour-sa-liberation/
https://russie-libertes.org/index.php/2021/03/11/invitation-online-discussion-how-can-eu-russia-relations-contribute-to-strengthening-civil-society-in-russia/
https://russie-libertes.org/index.php/2021/03/04/des-parlementaires-sengagent-pour-la-liberation-dalexei-navalny/
https://russie-libertes.org/index.php/2021/02/19/webinar-avec-isabelle-mandraud-julien-theron-auteurs-du-livre-poutine-la-strategie-du-desordre/
https://russie-libertes.org/index.php/2021/02/12/rassemblement-a-paris-lamour-est-plus-fort-que-les-repressions-en-russie/
https://russie-libertes.org/index.php/2021/02/02/liberte-pour-alexei-navalny/
https://russie-libertes.org/index.php/2021/01/31/invitation-au-webinaire-comment-aider-le-mouvement-pour-la-democratie-en-russie/
https://russie-libertes.org/index.php/2021/01/31/paris-31-01-21-rassemblement-pour-la-liberation-dalexei-navalny-et-de-tous-les-prisonniers-politiques-en-russie/
https://russie-libertes.org/index.php/2021/01/29/video-freenavalny-appel-de-plusieurs-personnalites-francaises-et-russes/
https://russie-libertes.org/index.php/2021/01/27/rassemblement-a-paris-liberez-navalny-et-tous-les-prisonniers-politiques-en-russie/
https://russie-libertes.org/index.php/2021/01/23/manifestation-a-paris-pour-la-liberation-dalexei-navalny-et-des-prisonniers-politiques-en-russie/
https://russie-libertes.org/index.php/2021/01/22/signez-la-petition-pour-la-liberation-immediate-de-lopposant-russe-alexei-navalny/
https://russie-libertes.org/index.php/2021/01/19/russie-libertes-appelle-a-un-rassemblement-a-paris-pour-exiger-la-liberation-de-navalny/
https://russie-libertes.org/index.php/2021/01/19/bonjour-tout-le-monde/
https://russie-libertes.org/index.php/guide-d-emigration/
https://russie-libertes.org/index.php/russie-libertes-dans-les-medias/
https://russie-libertes.org/index.php/donner-2/
https://russie-libertes.org/index.php/adherer/
https://russie-libertes.org/index.php/nos-publications/
https://russie-libertes.org/index.php/page-d-exemple/contact/
https://russie-libertes.org/index.php/russie-libertes-sur-les-reseaux-sociaux/
https://russie-libertes.org/index.php/page-d-exemple/questions-reponses/
https://russie-libertes.org/index.php/page-d-exemple/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment