Maison  >  Article  >  développement back-end  >  Introduction détaillée à l'utilisation de Python pour générer un plan de site

Introduction détaillée à l'utilisation de Python pour générer un plan de site

巴扎黑
巴扎黑original
2017-08-16 13:37:592326parcourir

Lorsque vous travaillez sur des projets de sites Web, des scripts sont souvent utilisés pour générer des plans de site, ce qui est pratique pour les robots d'exploration et bénéfique pour le référencement. Alors comment utiliser Python pour générer un plan de site ? Étudions-le ci-dessous.

Installation de lxml

Vous devez d'abord pip install lxml pour installer la bibliothèque lxml.

Si vous rencontrez l'erreur suivante sur Ubuntu :

#include "libxml/xmlversion.h"
compilation terminated.
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
----------------------------------------
Cleaning up...
 Removing temporary dir /tmp/pip_build_root...
Command /usr/bin/python -c "import setuptools, tokenize;__file__='/tmp/pip_build_root/lxml/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-O4cIn6-record/install-record.txt --single-version-externally-managed --compile failed with error code 1 in /tmp/pip_build_root/lxml
Exception information:
Traceback (most recent call last):
 File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 122, in main
  status = self.run(options, args)
 File "/usr/lib/python2.7/dist-packages/pip/commands/install.py", line 283, in run
  requirement_set.install(install_options, global_options, root=options.root_path)
 File "/usr/lib/python2.7/dist-packages/pip/req.py", line 1435, in install
  requirement.install(install_options, global_options, *args, **kwargs)
 File "/usr/lib/python2.7/dist-packages/pip/req.py", line 706, in install
  cwd=self.source_dir, filter_stdout=self._filter_install, show_stdout=False)
 File "/usr/lib/python2.7/dist-packages/pip/util.py", line 697, in call_subprocess
  % (command_desc, proc.returncode, cwd))
InstallationError: Command /usr/bin/python -c "import setuptools, tokenize;__file__='/tmp/pip_build_root/lxml/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-O4cIn6-record/install-record.txt --single-version-externally-managed --compile failed with error code 1 in /tmp/pip_build_root/lxml

Veuillez installer les dépendances suivantes :

sudo apt-get install libxml2-dev libxslt1-dev

Code Python

Ce qui suit est généré Pour les codes d'index sitemap et sitemapindex, vous pouvez transmettre les paramètres requis selon les besoins, ou ajouter des champs :

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import io
import re
from lxml import etree
def generate_xml(filename, url_list):
  """Generate a new xml file use url_list"""
  root = etree.Element('urlset',
             xmlns="http://www.sitemaps.org/schemas/sitemap/0.9")
  for each in url_list:
    url = etree.Element('url')
    loc = etree.Element('loc')
    loc.text = each
    url.append(loc)
    root.append(url)
  header = u&#39;<?xml version="1.0" encoding="UTF-8"?>\n&#39;
  s = etree.tostring(root, encoding=&#39;utf-8&#39;, pretty_print=True)
  with io.open(filename, &#39;w&#39;, encoding=&#39;utf-8&#39;) as f:
    f.write(unicode(header+s))
def update_xml(filename, url_list):
  """Add new url_list to origin xml file."""
  f = open(filename, &#39;r&#39;)
  lines = [i.strip() for i in f.readlines()]
  f.close()
  old_url_list = []
  for each_line in lines:
    d = re.findall(&#39;<loc>(http:\/\/.+)<\/loc>&#39;, each_line)
    old_url_list += d
  url_list += old_url_list
  generate_xml(filename, url_list)
def generatr_xml_index(filename, sitemap_list, lastmod_list):
  """Generate sitemap index xml file."""
  root = etree.Element(&#39;sitemapindex&#39;,
             xmlns="http://www.sitemaps.org/schemas/sitemap/0.9")
  for each_sitemap, each_lastmod in zip(sitemap_list, lastmod_list):
    sitemap = etree.Element(&#39;sitemap&#39;)
    loc = etree.Element(&#39;loc&#39;)
    loc.text = each_sitemap
    lastmod = etree.Element(&#39;lastmod&#39;)
    lastmod.text = each_lastmod
    sitemap.append(loc)
    sitemap.append(lastmod)
    root.append(sitemap)
  header = u&#39;<?xml version="1.0" encoding="UTF-8"?>\n&#39;
  s = etree.tostring(root, encoding=&#39;utf-8&#39;, pretty_print=True)
  with io.open(filename, &#39;w&#39;, encoding=&#39;utf-8&#39;) as f:
    f.write(unicode(header+s))
if __name__ == &#39;__main__&#39;:
  urls = [&#39;http://www.baidu.com&#39;] * 10
  mods = [&#39;2004-10-01T18:23:17+00:00&#39;] * 10
  generatr_xml_index(&#39;index.xml&#39;, urls, mods)

Effet

L'effet généré doit être dans ce format :

format du plan du site :

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
 <url>
  <loc>http://www.example.com/foo.html</loc>
 </url>
</urlset>
sitemapindex格式:
<?xml version="1.0" encoding="UTF-8"?>
  <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>
   <loc>http://www.example.com/sitemap1.xml.gz</loc>
   <lastmod>2004-10-01T18:23:17+00:00</lastmod>
  </sitemap>
  <sitemap>
   <loc>http://www.example.com/sitemap2.xml.gz</loc>
   <lastmod>2005-01-01</lastmod>
  </sitemap>
  </sitemapindex>

Problème de format d'heure Lastmod

le format utilise la norme ISO 8601 S'il s'agit d'un système Linux/Unix, vous pouvez utiliser la fonction suivante pour obtenir<.>

def get_lastmod_time(filename):
  time_stamp = os.path.getmtime(filename)
  t = time.localtime(time_stamp)
  # return time.strftime(&#39;%Y-%m-%dT%H:%M:%S+08:00&#39;, t)
  return time.strftime(&#39;%Y-%m-%dT%H:%M:%SZ&#39;, t)
Optimisation

De manière générale, utiliser lxml est inefficace et prend beaucoup de mémoire. Vous pouvez le créer directement en utilisant la méthode d'écriture du fichier.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn