python - how - Recuperando un subconjunto de href de findall() en BeautifulSoup
select beautifulsoup class (1)
Use el módulo de expresiones regulares para hacer coincidir solo los enlaces que desee.
import requests
# The Requests library.
from bs4 import BeautifulSoup
from lxml import html
from re import compile
user_input = input("Enter Artist Name = ").replace(" ","+")
base_url = "https://genius.com/search?q="+user_input
header = {''User-Agent'':''''}
response = requests.get(base_url, headers=header)
soup = BeautifulSoup(response.content, "lxml")
pattern = re.compile("[/S]+-lyrics$")
for link in soup.find_all(''a'',href=True):
if pattern.match(link[''href'']):
print (link[''href''])
Salida:
https://genius.com/Drake-hotline-bling-lyrics
https://genius.com/Drake-one-dance-lyrics
https://genius.com/Drake-hold-on-were-going-home-lyrics
https://genius.com/Drake-know-yourself-lyrics
https://genius.com/Drake-back-to-back-lyrics
https://genius.com/Drake-all-me-lyrics
https://genius.com/Drake-0-to-100-the-catch-up-lyrics
https://genius.com/Drake-started-from-the-bottom-lyrics
https://genius.com/Drake-from-time-lyrics
https://genius.com/Drake-the-motto-lyrics
Esto solo se ve si su enlace coincide con el patrón que termina en -lyrics
. También puede usar una lógica similar para filtrar usando la variable user_input
.
Espero que esto ayude.
Mi objetivo es escribir un script de Python que tome el nombre de un artista como una entrada de cadena y luego lo agregue a la URL base que va a la consulta de búsqueda de genio. Luego recupera todas las letras de los enlaces de la página web devuelta (que es el subconjunto requerido de este problema que también contendrá específicamente el nombre del artista en cada enlace de ese subconjunto). Ahora estoy en la fase inicial y solo he podido recuperar todos los enlaces de la página web, incluidos los que no quiero en mi subconjunto Traté de encontrar una solución simple pero fallé continuamente.
import requests
# The Requests library.
from bs4 import BeautifulSoup
from lxml import html
user_input = input("Enter Artist Name = ").replace(" ","+")
base_url = "https://genius.com/search?q="+user_input
header = {''User-Agent'':''''}
response = requests.get(base_url, headers=header)
soup = BeautifulSoup(response.content, "lxml")
for link in soup.find_all(''a'',href=True):
print (link[''href''])
Esto devuelve esta lista completa, mientras que solo necesito las que terminan con letras y el nombre del artista (aquí, por ejemplo, Drake). Estos serán los enlaces desde donde debería ser capaz de recuperar las letras.
https://genius.com/
/signup
/login
https://www.facebook.com/geniusdotcom/
https://twitter.com/Genius
https://www.instagram.com/genius/
https://www.youtube.com/user/RapGeniusVideo
https://genius.com/new
https://genius.com/Drake-hotline-bling-lyrics
https://genius.com/Drake-one-dance-lyrics
https://genius.com/Drake-hold-on-were-going-home-lyrics
https://genius.com/Drake-know-yourself-lyrics
https://genius.com/Drake-back-to-back-lyrics
https://genius.com/Drake-all-me-lyrics
https://genius.com/Drake-0-to-100-the-catch-up-lyrics
https://genius.com/Drake-started-from-the-bottom-lyrics
https://genius.com/Drake-from-time-lyrics
https://genius.com/Drake-the-motto-lyrics
/search?page=2&q=drake
/search?page=3&q=drake
/search?page=4&q=drake
/search?page=5&q=drake
/search?page=6&q=drake
/search?page=7&q=drake
/search?page=8&q=drake
/search?page=9&q=drake
/search?page=672&q=drake
/search?page=673&q=drake
/search?page=2&q=drake
/embed_guide
/verified-artists
/contributor_guidelines
/about
/static/press
mailto:[email protected]
https://eventspace.genius.com/
/static/privacy_policy
/jobs
/developers
/static/terms
/static/copyright
/feedback/new
https://genius.com/Genius-how-genius-works-annotated
https://genius.com/Genius-how-genius-works-annotated
Mi próximo paso sería usar selenio para emular el desplazamiento, que en el caso de genius.com proporciona el conjunto completo de resultados de búsqueda. Cualquier sugerencia o recurso sería apreciado. También me gustaría algunos comentarios sobre la forma en que deseo proceder con esta solución. ¿Podemos hacerlo más genérico?
PD: Es posible que no haya explicado mi problema con lucidez, pero lo hice lo mejor posible. Además, cualquier ambigüedad es bienvenida también. Soy nuevo en scratch, python y programación, así que solo quería asegurarme de seguir el camino correcto.