with soup how all python python-2.7 web-scraping beautifulsoup lxml

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.