Actualmente tengo el Selenio conectado a python para raspar una página web. Me enteré de que realmente la página extrae datos de una API JSON, y puedo conseguir una respuesta JSON mientras estoy conectado a la página.

Sin embargo, mi enfoque de conseguir que la respuesta en python parece un poco malo; yo seleccione el texto que se adjunta en <pre> etiquetas y el uso de python json paquete para analizar los datos así:

import json
from selenium import webdriver

url = 'http://jsonplaceholder.typicode.com/posts/1'
driver = webdriver.Chrome()
driver.get(url)
json_text = driver.find_element_by_css_selector('pre').get_attribute('innerText')
json_response = json.loads(json_text)

La única razón por la que tengo que seleccionar dentro de <pre> etiquetas es porque cuando JSON aparece en Chrome, se trata de formato como este:

<html>
<head></head>
<body>
<pre style="word-wrap: break-word; white-space: pre-wrap;">{
  "userId": 1,
  "id": 1,
  "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
  "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
}</pre>
</body>
</html>

Y la única razón por la que necesito hacer esto dentro de selenio es porque tengo que estar registrado en el sitio web con el fin de obtener una respuesta. De lo contrario, tengo un 401 y no hay datos.

1 Comentario

  1. 13

    Usted puede encontrar el pre elemento y lo consigue de texto, y luego cargarlo a través de json.loads():

    import json 
    
    pre = driver.find_element_by_tag_name("pre").text
    data = json.loads(pre)
    print(data)

    También, usted puede evitar el uso de selenium para obtener el deseado JSON y la transferencia de datos de las cookies de selenium a requests para mantener a «mantener la sesión iniciada», ver:

    • 1. Es bueno saber que el <pre> método funciona (aunque .text es definitivamente mejor que mi enfoque .get_attribute('innerText'))…
    • 2. HASTA alrededor requests‘s cookies de apoyo. Me las arreglé para evitar otro de carga de página de este 7MB angular de la aplicación del infierno, afeitarse un par de segundos de mi script de tiempo de ejecución, y escribir un código más limpio. Gracias!
    • para aquellos de ustedes que tienen problemas con firefox autoformating el json de respuesta en una tabla y el cambio de la fuente: añadir «origen de vista:» en frente de su dirección url. A continuación, puede continuar utilizando la función buscar por la etiqueta de «pre».

Dejar respuesta

Please enter your comment!
Please enter your name here