Frage

Ich versuche, einen regulären Ausdruck zu erstellen, der dem Link aus einer Seitenquelle entspricht.Ich habe Text, der wie folgt formatiert ist:

Etwas hier ist hier ein Link

<a class="_5syj" href="https://www.here.com/FirstCal?ref=br_rs">First Cal</a><span class="mls _1ccm9 _49"></span><a class="_fasc" href="https://www.here.com/Mall?ref=br_rs">Mall</a><span class="m1ls _1cm9 _49"></span>

Ich möchte alle Links erhalten, die mit href="https://www.here.com/(.*)?ref=br_rs"> beginnen

Von den Links dazu würde ich also entweder den gesamten Link oder FIrstCal und Mall (vom Link) erhalten.

Python-Code:

regex = r'(?<=href="https://www.here.com/).*(?<=?ref=br_rs)'

link = re.findall(regex, str(source))

link

Aber es funktioniert nicht.

Irgendwelche Ideen ?

PS:Regex wäre die einzige Möglichkeit, dies zu tun.Eine HTML-Analyse funktioniert nicht, da die Website aufgrund ihrer Struktur nicht „stabil“ ist.

War es hilfreich?

Lösung

Verwenden Sie BeautifulSoup mit einem regulären Ausdruck, der genau dem entspricht href Inhalt:

soup.find_all('a', href=re.compile('https://www.here.com/.*?ref=br_rs'))

Dem Parser ist es egal, ob sich die Struktur ändert, Sie müssen nur genau angeben, was Ist stabil;die Links.

Demo:

>>> import re
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('''\
... <a class="_5syj" href="https://www.here.com/FirstCal?ref=br_rs">First Cal</a><span class="mls _1ccm9 _49"></span><a class="_fasc" href="https://www.here.com/Mall?ref=br_rs">Mall</a><span class="m1ls _1cm9 _49"></span>
... ''')
>>> soup.find_all('a', href=re.compile('https://www.here.com/.*?ref=br_rs'))
[<a class="_5syj" href="https://www.here.com/FirstCal?ref=br_rs">First Cal</a>, <a class="_fasc" href="https://www.here.com/Mall?ref=br_rs">Mall</a>]
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top