Ten paciencia conmigo, soy muy nuevo en Python y escapado, pero estoy ansioso por aprender.

Estoy tratando de leer un hipervínculo que está anidado dentro de una función dentro de las etiquetas usando python.

Hasta ahora, aprendí que no puedo usar BeautifulSoup porque primero un controlador web debe cargar el script. Instalé selenium (aunque pesado en el trabajo) y chrome webdriver, y abrí el enlace en un navegador completo o sin cabeza. Algunas de las sugerencias sobre raspar JS son raspar con Regex y / o find_element_by_id (). Sin embargo, no hay etiquetas de identificación en el script. Lo único que puedo encontrar en la fuente entre las etiquetas es un $ (document) .ready (function () que abre Jplayer y se refiere a un hipervínculo. Mi objetivo es copiar / raspar el hipervínculo.

¿Alguna idea de cómo puedo extraer de la 'cadena' de la función para poder seleccionar solo la parte con el hipervínculo y almacenar como variable?

0
JustLearningPython 22 ene. 2021 a las 01:39

1 respuesta

La mejor respuesta

No estoy completamente seguro de lo que está tratando de lograr, pero esto es lo que he entendido. Desea obtener el enlace de algún elemento de la página web.

El selenio tiene múltiples funciones para encontrar el elemento de su elección, por ejemplo:

  • find_element_by_class_name
  • find_element_by_id
  • find_element_by_xpath (por lo general, el más preciso en mi experiencia)
  • find_element_by_tag_name
  • find_element_by_link_text
  • ...

Si desea encontrar varios elementos, puede usar find_elements_by_ que devolverá una lista.

Puede definir un elemento por uno de estos y luego obtener el atributo href del mismo. Por ejemplo:

element = driver.find_element_by_xpath("xpath_to_your_element")
print(element.get_attribute("href"))  # None if element doesn't have a href attribute

EDITAR: Encontrar xpath de elementos en la página web.

Normalmente uso la extensión llamada ruto https: // chrome .google.com / webstore / detail / ruto-xpath-finder / ilcoelkkcokgeeijnopjnolmmighnppp? hl = en (lo siento, no pude averiguar cómo agregar un enlace adecuado)

Así es como lo usas:

  1. Haga clic con el botón derecho en un elemento del que desea encontrar el xpath
  2. Coloca el cursor sobre "Ruto - XPath Finder"
  3. Seleccione "Estándar"
  4. Haga clic en el icono de su extensión

4.5. Puede que tenga que hacer clic en el icono bastante rápido, ya que normalmente se restablece en unos 3 segundos. Después de hacer clic en la extensión, mantendrá los resultados hasta que haga clic.

  1. Copiar un xpath

ruto image

NOTA: Esto no está patrocinado por ruto de ninguna manera.

EDIT2: obtener el enlace de la fuente de la página

Finalmente he entendido tu problema y he encontrado una solución.

Primero debe obtener la fuente de la página del sitio web:

import requests

response = requests.get(link_to_website)
content = response.content.decode("utf-8")
print(content)  # this will print the page source of your webpage

Ahora necesitamos encontrar el enlace. Creo que la forma más sencilla de hacerlo es utilizando expresiones regulares. Podemos comenzar con una cita y luego ir hasta .m4a y terminar con una cita.

Esta es la expresión regular que se me ocurrió: r"\".+\.m4a\""

Combinándolo todo junto:

import requests
import re

response = requests.get("https://soundgasm.net/u/rocketear/One-Art-by-Elizabeth-Bishop")
content = response.content.decode("utf-8")

file = re.search(re.compile(r"\".+\.m4a\""), content)
print(content[file.start():file.end()])
1
SaladHead 27 ene. 2021 a las 06:33