J’ai besoin de rechercher dans un document texte tous ce qui se trouve entre ‘<td id=’ et ’
J’ai donc écris cette expression test = re.findall("<td id=.*</td>", text) (je suis en python)
Seulement cette expression ne fonctionne pas car le texte qui se trouve entre ‘<td id=’ et ’ est sur plusieurs ligne. Or mon expression ne permet que de rechercher sur une seule ligne.
Quelqu’un peut m’aider à la modifier pour que la recherche soit bien effective sur plusieurs lignes?
J’aurais voulu récupérer le contenu de chaque td dans un tableau or cette ligne re.findall("<td id=.*</td>", r.text, re.DOTALL) me récupère tout de la balise 1 à la balise X…
Oui c’est bien une page html qui est concernée. Je suis entrain d’essayer BeautifulSoup en parallèle de mes essais avec les regex mais pour l’instant je n’arrive à rien
Le site donne les horaires de diffusion de certaines séries. A terme je veux récupérer la date de diffusion, la chaine, le nom de la série, l’épisode, le numéro de la saison et le numéro de l’épisode.
Ce premier regex que je fais doit me donner tous ce qui se trouve dans la classe “day” afin que je puisse par la suite avec d’autre regex récupérer les infos qui m’intéressent.
Et la ton regex ne fonctionne pas. Après peut être que les expressions régulières ne marche pas pour faire ce que je veux…
from urllib2 import urlopen
import bs4 as BeautifulSoup
html = urlopen('http://www.d8.tv/d8-series/pid6654-d8-longmire.html').read()
soup = BeautifulSoup.BeautifulSoup(html)
[quote=“Arnaud_”]Effectivement cela ne marche pas si tu veux récupérer des balises à l’intérieur du td.
On peut ôter l’effet glouton de cette façon :
Dans ton exemple, la dernière balise td n’est pas fermée correctement, donc cela ne renverra que 3 contenus.[/quote]
Effectivement dans l’exemple elle n’est pas fermé mais sur le site elle l’est bien. En tous cas cette fois ta regex fonctionne.
Mais je ne la comprends pas trop. Le ? signifie 0 ou 1 je n’arrive pas a comprendre comment il agit sur cette règle…
from urllib2 import urlopen
import bs4 as BeautifulSoup
html = urlopen('http://www.d8.tv/d8-series/pid6654-d8-longmire.html').read()
soup = BeautifulSoup.BeautifulSoup(html)
Je viens de testé avec ta ligne de beautifulsoup et effectivement elle me ressort bien les infos qui m’intéressent. Seulement contrairement à la regex je me retrouve avec toutes les infos à la suite et non dans un tableau. Il est donc plus compliqué pour moi de récupérer les infos qui m’intéressent au final (voir mon post juste au-dessus). A moins que la beautifulsoup me permettent aussi d’aller piocher les infos qui m’intéressent.
Comme je l’ai dit, au final j’ai besoin d’extraire pour chaque épisode les infos suivantes : Date de passage, heure de passage, nom de la série, nom de l’épisode, chaine sur laquelle ça passe, numéro de la saison et numéro de l’épisode.
Dans ce cas, le « ? » n’est pas à prendre tout seul, c’est la combinaison « *? » qui signifie : prendre la chaîne de taille minimale correspondant à la regexp.
[quote]?, +?, ??
The '', ‹ + ›, and ‹ ? › qualifiers are all greedy; they match as much text as possible. Sometimes this behaviour isn’t desired; if the RE <.> is matched against ‹
title
›, it will match the entire string, and not just ‹
›. Adding ‹ ? › after the qualifier makes it perform the match in non-greedy or minimal fashion; as few characters as possible will be matched. Using .? in the previous expression will match only ‹
›.[/quote]
Que ce soit avec le module re ou BeautifulSoup, il faut du temps pour comprendre le fonctionnement, mais pour avoir un gain de temps considérable par la suite.
Dans le cadre de « webscraping », il faut que tu t’attendes à ce que le site change de structure, ce qui t’obligera à t’adapter tout le temps.