0
votes

Extraire des noms de fichier d'une chaîne de HTML avec Python 2.7

Je parse un document HTML avec beauxoup . xxx

qui me donne cette chaîne: xxx

Je souhaite obtenir des noms de fichiers de chacun des chemins GIF dans la chaîne et je (pense) La méthode Resightall 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.

Quelle est la manière optimale de faire cela? Peut-il être fait dans un appel avec belle -soup?


4 commentaires

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]) 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 . Vous pouvez voir dans l'exemple de chaîne ci-dessus au-dessus duquel la DIV a la classe de Entrée-Contenu .


3 Réponses :


0
votes

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


0 commentaires

0
votes

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


0 commentaires

0
votes

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']


0 commentaires