Rastreo web: ¿cómo acceder al contenido representado en JavaScript a través de Angular.js?

Estoy tratando de raspar los datos del sitio público asx.com.au

La página http://www.asx.com.au/asx/research/company.do#!/ACB/details contiene un div con la clase ‘view-content’, que tiene la información que necesito:

introduzca la descripción de la imagen aquí

Pero cuando bash ver esta página a través de urllib2.urlopen de Python, ese div está vacío:

 import urllib2 from bs4 import BeautifulSoup url = 'http://www.asx.com.au/asx/research/company.do#!/ACB/details' page = urllib2.urlopen(url).read() soup = BeautifulSoup(page, "html.parser") contentDiv = soup.find("div", {"class": "view-content"}) print(contentDiv) # the results is an empty div: # 

¿Es posible acceder a los contenidos de esa div programáticamente?

Edición: según el comentario, parece que el contenido se representa a través de Angular.js . ¿Es posible activar la representación de ese contenido a través de Python?

Esta página utiliza JavaScript para leer datos del servidor y completar la página.

Veo que usa herramientas de desarrollador en Chrome: vea en la pestaña “Red” en las solicitudes “XHR” o “JS”.

Encontré esta url

http://data.asx.com.au/data/1/company/ACB?fields=primary_share,latest_annual_reports,last_dividend,primary_share.indices&callback=angular.callbacks._0

Esta url da todos los datos casi en formato JSON.

Pero si usa este enlace sin &callback=angular.callbacks._0 , obtendrá datos en formato JSON puro y podrá usar el módulo json para convertirlo al diccionario de Python.


EDITAR: código de trabajo

 import urllib2 from bs4 import BeautifulSoup import json # new url url = 'http://data.asx.com.au/data/1/company/ACB?fields=primary_share,latest_annual_reports,last_dividend,primary_share.indices' # read all data page = urllib2.urlopen(url).read() # convert json text to python dictionary data = json.loads(page) print(data['principal_activities']) 

Salida:

 Mineral exploration in Botswana, China and Australia.