Comment trouver des travées avec une classe spécifique contenant un texte spécifique à l'aide de la belle et la soupe de ré?
comment puis-je trouver tous span avec une classe de 'blue'
qui contiennent du texte dans le format:
04/18/13 7:29pm
qui pourraient donc être:
04/18/13 7:29pm
ou:
Posted on 04/18/13 7:29pm
en termes de construction de la logique pour ce faire, c'est ce que j'ai obtenu jusqu'à présent:
new_content = original_content.find_all('span', {'class' : 'blue'}) # using beautiful soup's find_all
pattern = re.compile('<span class=\"blue\">[data in the format 04/18/13 7:29pm]</span>') # using re
for _ in new_content:
result = re.findall(pattern, _)
print result
J'ai fait allusion à https://stackoverflow.com/a/7732827 et https://stackoverflow.com/a/12229134 pour essayer de trouver une façon de le faire, mais le dessus est tout ce que j'ai obtenu jusqu'à présent.
edit:
de préciser le scénario, il y span avec:
<span class="blue">here is a lot of text that i don't need</span>
et
<span class="blue">this is the span i need because it contains 04/18/13 7:29pm</span>
et remarque que je n'ai besoin 04/18/13 7:29pm
pas le reste du contenu.
edit 2:
J'ai aussi essayé:
pattern = re.compile('<span class="blue">.*?(\d\d/\d\d/\d\d \d\d?:\d\d\w\w)</span>')
for _ in new_content:
result = re.findall(pattern, _)
print result
et a reçu l'erreur:
'TypeError: expected string or buffer'
OriginalL'auteur user1063287 | 2013-04-27
Vous devez vous connecter pour publier un commentaire.
de sortie:
entre la date et l'heure dans le code source d'origine par exemple04/18/13 7:29pm
. pour référence, j'ai ajouté.replace(" "," ")
à l'origine'urlopen read object'
et cela a fonctionné. merci beaucoup (à tous les intervenants!).OriginalL'auteur Corey Goldberg
C'est un flexible regex que vous pouvez utiliser:
Exemple:
OriginalL'auteur pradyunsg
Ce modèle semble répondre à ce que vous recherchez:
essayez de changer votre troisième ligne à
result = pattern.match(_).groups()
.re.findall
attend une chaîne de caractères(comme la chaîne de caractères que vous utilisez le plus tôt lorsque vous appelezre.compile
et à la place que vous lui donnant un déjà compilé regex. Essentiellement, vous êtes en essayant de compiler votre modèle à deux reprises.Il sonne comme
_
n'est pas une chaîne encore, vous allez avoir besoin d'extraire la chaîne de votre_
variable avant de pouvoir utiliser une regex. Je suppose que vous pouvez appeler quelque chose comme_.string
, essayer quelques-uns des instructions d'impression, commeprint _
etprint dir(_)
afin de comprendre à quel type de l'objet sur lequel vous travaillez en ce moment.Corey réponse te donne une explication plus détaillée de la façon dont pour ce faire, la méthode que vous avez besoin d'appeler sur
_
étaitget_text()
. Mais il propose une réponse plus complète 🙂Le
AttributeError
vous obtenez à partir de quand la regex ne correspond pas à une chaîne, elle retourneNone
. Cela provoque le code d'appel deNone.groups()
qui n'existe pas. Corey code de la comptabilité de ce avec sa ligneif m:
c'est pourquoi j'ai ordonné à son code. Espérons que cette aide!OriginalL'auteur Nolen Royalty