Je parse un document HTML avec qui me donne cette chaîne: p> Je souhaite obtenir des noms de fichiers de chacun des chemins GIF dans la chaîne et je (pense) La méthode Quelle est la manière optimale de faire cela? Peut-il être fait dans un appel avec belle -soup? P> p> beauxoup code>.
Resightall code> dans le module d'expression régulière est la meilleure façon de le faire, mais je n'ai pas beaucoup de choses Succès. P>
3 Réponses :
au lieu de regex, je recommanderais d'utiliser HTMLParser CODE> Classe (
python2 code>
/ python3 code>
) de la bibliothèque standard. Il a un HANDING_STARTTAG CODE >
méthode qui appelait à gérer le début d'une étiquette. >>> source = "\n".join(entry_content) # I assume "entry_content" is a list of div elements.
>>>
>>> try:
... from HTMLParser import HTMLParser # python 2
... except ImportError:
... from html.parser import HTMLParser
...
>>> class SrcParser(HTMLParser):
... def __init__(self, *args, **kwargs):
... self.links = []
... self._basename = kwargs.pop('only_basename', False)
... super(SrcParser, self).__init__(*args, **kwargs)
...
... def handle_starttag(self, tag, attrs):
... for attr, val in attrs:
... if attr == 'src' and val.endswith("gif"):
... if self._basename:
... import os.path
... val = os.path.splitext(os.path.basename(val))[0]
... self.links.append(val)
...
>>> source_parser = SrcParser()
>>> source_parser.feed(source)
>>> print(*source_parser.links, sep='\n')
http://www.crmpicco.co.uk/wp-content/themes/2010/images/lotto_balls/17.gif
http://www.crmpicco.co.uk/wp-content/themes/2010/images/balls/21.gif
http://www.crmpicco.co.uk/wp-content/themes/2010/images/balls/31.gif
http://www.crmpicco.co.uk/wp-content/themes/2010/images/balls/47.gif
http://www.crmpicco.co.uk/wp-content/themes/lotto2010/images/balls/bonus43.gif
>>>
>>> source_parser = SrcParser(only_basename=True)
>>> source_parser.feed(source)
>>> print(*source_parser.links, sep='\n')
17
21
31
47
bonus43
Je n'ai pas pu trouver de divs avec Entrée-Contenu code> sur votre page, mais cela devrait fonctionner. Modifiez le
col-MD-4 code> sur
Entry-contenu code>.
zce
691505
gaiq
Je recommande une autre solution compatible avec Python 2 et Python 3 et est idéale pour extraire des données de XML.
['http://www.crmpicco.co.uk/wp-content/themes/2010/images/lotto_balls/17.gif', 'http://www.crmpicco.co.uk/wp-content/themes/2010/images/balls/21.gif', 'http://www.crmpicco.co.uk/wp-content/themes/2010/images/balls/31.gif', 'http://www.crmpicco.co.uk/wp-content/themes/2010/images/balls/47.gif', 'http://www.crmpicco.co.uk/wp-content/themes/lotto2010/images/balls/bonus43.gif'] ['17', '21', '31', '47', 'bonus43']
Quelle est votre production attendue?
@ABDULNIYASPM Idéalement, j'aurais une gamme de noms de fichiers (12, 56, 18, 72, 16 etc.). J'essayais de coller le chemin complet
re.findall (r'src = "(. *) /> ', Entrée_content [1]) code> puis travaillez à partir de là. Disclaimer: Python nubz0r.;)
Il n'y a pas de divs avec l'entrée-contenu sur l'URL que vous avez fournie, êtes-vous sûr que c'est le bon?
@isopach non, tu as raison. J'ai changé l'URL, mais il y a des divs avec une classe de
Entrée-Contenu code>. Vous pouvez voir dans l'exemple de chaîne ci-dessus au-dessus duquel la DIV a la classe de
Entrée-Contenu code>.