Estoy usando Python 3 y estoy tratando de recuperar datos de un sitio web. Sin embargo, estos datos se cargan dinámicamente y el código que tengo ahora no funciona:

url = eveCentralBaseURL + str(mineral)
print("URL : %s" % url);

response = request.urlopen(url)
data = str(response.read(10000))

data = data.replace("\n", "\n")
print(data)

Donde estoy tratando de encontrar un determinado valor, me estoy encontrando una plantilla en lugar de por ejemplo,»{{formatPrice mediana}}» en lugar de «4.48».

¿Cómo puedo hacer para que yo pueda recuperar el valor en lugar del texto de marcador de posición?

Edición: Este es la página específica estoy tratando de extraer información. Estoy tratando de conseguir la «mediana» valor», que utiliza la plantilla {{formatPrice mediana}}

Edit 2: he instalado y configurado el programa para el uso de Selenio y BeautifulSoup.

El código que tengo ahora es:

from bs4 import BeautifulSoup
from selenium import webdriver

#...

driver = webdriver.Firefox()
driver.get(url)

html = driver.page_source
soup = BeautifulSoup(html)

print "Finding..."

for tag in soup.find_all('formatPrice median'):
    print tag.text

Aquí es una captura de pantalla del programa se está ejecutando. Por desgracia, no parece ser la búsqueda de cualquier cosa con «formatPrice mediana», precisó.

  • Te la plantilla de etiquetas cuando usted visita el URL en el navegador? EDIT: Además, ¿Cómo son sus plantillas prestados. Si está utilizando una plantilla de javascript motor (por ejemplo, los Manillares) esto probablemente significa que usted conseguirá las etiquetas de plantilla en la respuesta.
  • VOLVER a editar 2 – esto es sólo acerca de una nueva pregunta… de todos modos, creo que usted necesita para echar un vistazo a la documentación de find_all como su find_all cadena no es válido. Voy a actualizar a continuación con algo un poco más cerca de lo que usted necesita crummy.com/software/BeautifulSoup/bs3/….
  • Saludos! He intentado utilizar la sopa.findall(True) sólo consigue todas las etiquetas, y la información que necesito está ahí! Es una cuestión de encontrar exactamente la etiqueta que necesito de búsqueda para conseguir esa información.
InformationsquelleAutor Tagc | 2013-07-11

1 Comentario

  1. 15

    Asumiendo que usted está tratando de obtener valores a partir de una página en la que se representa el uso de plantillas javascript (por ejemplo algo como manillar), entonces esto es lo que va a obtener con cualquiera de las soluciones estándar (es decir, beautifulsoup o requests).

    Esto es debido a que el navegador utiliza javascript para modificar lo que recibió y crear nuevos elementos DOM. urllib va a hacer la parte requirente como un navegador, pero no a la plantilla de representación de parte. Una buena descripción de los problemas que se puede encontrar aquí. En este artículo se analizan tres soluciones principales:

    1. analizar el ajax JSON directamente
    2. uso sin conexión intérprete de Javascript para procesar la solicitud Mono araña, crowbar
    3. uso de un navegador herramienta de automatización de splinter

    Esta respuesta proporciona algunas sugerencias más para la opción 3, tales como el selenio o watir. He usado el selenio para automatizada de pruebas web y su muy útil.


    EDITAR

    De sus comentarios parece que es un manillar impulsado sitio. Me gustaría recomendar el selenio y la sopa de hermosa. Esta respuesta da un buen ejemplo de código que pueden ser útiles:

    from bs4 import BeautifulSoup
    from selenium import webdriver
    driver = webdriver.Firefox()
    driver.get('http://eve-central.com/home/quicklook.html?typeid=34')
    
    html = driver.page_source
    soup = BeautifulSoup(html)
    
    # check out the docs for the kinds of things you can do with 'find_all'
    # this (untested) snippet should find tags with a specific class ID
    # see: http://www.crummy.com/software/BeautifulSoup/bs4/doc/#searching-by-css-class
    for tag in soup.find_all("a", class_="my_class"):
        print tag.text

    Básicamente el selenio presenta el renderizado de HTML de tu navegador y, a continuación, usted puede analizar el uso de BeautifulSoup de la page_source de la propiedad. Buena suerte 🙂

    • Gracias por la ayuda. Tengo muy poca experiencia con los lenguajes de la web o en la web de la programación, pero voy a enlazar el sitio que estoy tratando de analizar los datos de si eso ayuda.
    • Voy a empezar a buscar en las solicitudes y beautifulsoup demasiado.
    • He echado un vistazo en el sitio – que es casi rompió mi ordenador un par de veces la carga 🙂 Sí, si son de Cromo golpe F12 y si vas a la pestaña «Red» verá Backbone, underscore y handlebars están cargados. Creo que usted tendrá que ir a la selenium enfoque. Voy a editar con algún código de ejemplo
    • Gracias de nuevo. He probado lo que te he recomendado y actualizado mi post. 🙂

Dejar respuesta

Please enter your comment!
Please enter your name here