J'ai besoin de trouver le contenu des formulaires à partir du fichier source HTML, j'ai fait quelques recherches et trouvé une très bonne méthode pour le faire, mais le problème est qu'il n'imprime que trouvé en premier, comment puis-je le parcourir et sortir tout le contenu du formulaire, pas juste le premier?
line = 'bla bla bla<form>Form 1</form> some text...<form>Form 2</form> more text?'
matchObj = re.search('<form>(.*?)</form>', line, re.S)
print matchObj.group(1)
# Output: Form 1
# I need it to output every form content he found, not just first one...
N'utilisez pas d'expressions régulières pour analyser le HTML.
Mais si vous avez besoin de trouver toutes les correspondances d'expression rationnelle dans une chaîne, utilisez la fonction findall
.
import re
line = 'bla bla bla<form>Form 1</form> some text...<form>Form 2</form> more text?'
matches = re.findall('<form>(.*?)</form>', line, re.DOTALL)
print(matches)
# Output: ['Form 1', 'Form 2']
À la place d'utiliser re.search
utilisation re.findall
il vous renverra toutes les correspondances dans un List
. Ou vous pouvez également utiliser re.finditer
(que j'aime le plus utiliser), il renverra un Iterator Object
et vous pouvez simplement l'utiliser pour parcourir toutes les correspondances trouvées.
line = 'bla bla bla<form>Form 1</form> some text...<form>Form 2</form> more text?'
for match in re.finditer('<form>(.*?)</form>', line, re.S):
print match.group(1)
L'utilisation de regex à cette fin n'est pas la bonne approche. Puisque vous utilisez python vous avez une bibliothèque vraiment géniale disponible pour extraire des parties de documents HTML: BeautifulSoup .