2 votes

Essayer d'obtenir tous les liens d'une chaîne qui se termine par ','.

J'ai besoin de récupérer tous les liens avec les albums de l'artiste depuis la page Genius. Tous les liens se trouvent dans le cinquième étiquette préchargement-contenu valeur de attribut données préchargées_données . Cette valeur est stockée dans var string en tant que str.

J'ai essayé d'extraire tous les liens commençant par 'https://genius.com/albums/' et se terminant par ',' mais cela n'a pas fonctionné. Lorsque je n'ai pas utilisé le signe $ pour la fin, j'ai obtenu la bonne quantité de liens mais sans la partie finale nécessaire.

import urllib.request, urllib.parse, urllib.error
from bs4 import BeautifulSoup
import ssl
from urllib.request import Request, urlopen
import re

name = input('Rapper - ')
url = 'https://genius.com/artists/'+name+''
hdr = {'User-Agent': 'Mozilla/5.0'}
req = Request(url,headers=hdr)
html = urlopen(req)
soup = BeautifulSoup(html, 'html.parser')

hrefs = soup.find_all("preload-content")
string = hrefs[5]['data-preload_data']

result = re.findall('(https://genius.com/albums/'+name+'.,$)', string)
print(result)

1voto

Wiktor Stribiżew Points 100073

Vous pouvez utiliser

re.findall(r'(https://genius\.com/albums/' + re.escape(name) + '/[^"\'\s<>]*?)&quot;,', string)

Voir le Démonstration de regex .

Détails

  • (https://genius\.com/albums/' + re.escape(name) + '/[^"\'\s<>]*?) - Groupe 1 :
    • https://genius\.com/albums/' + re.escape(name) + '/ - une sous-chaîne littérale
    • [^"\'\s<>]*? - zéro ou plusieurs caractères autres que " , ' , espaces blancs, < y > comme le moins possible (en raison de *? quantificateur paresseux)
  • &quot;, - une chaîne littérale

Notez le name lorsqu'il est utilisé dans une regex, tous les caractères spéciaux doivent être échappés pour que la regex soit syntaxiquement correcte. re.escape(name) .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X