J'essaye de gratter les données du site public asx.com.a
La page http://www.asx.com.au/asx/research/company.do#!/ACB/details contient un div
avec la classe 'view-content', qui a les informations dont j'ai besoin:
Mais quand j'essaie de visualiser cette page via le urllib2.urlopen
De Python, cette div est vide:
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:
# <div class="view-content" ui-view=""></div>
Est-il possible d'accéder au contenu de cette div par programme?
Modifier: selon le commentaire, il apparaît que le contenu est rendu via Angular.js
. Est-il possible de déclencher le rendu de ce contenu via Python?
Cette page utilise JavaScript pour lire les données du serveur et remplir la page.
Je vois que vous utilisez des outils de développement dans chrome - voir dans l'onglet "Réseau" sur les demandes "XHR" ou "JS".
J'ai trouvé cette URL
Cette URL donne toutes les données presque au format JSON
Mais si vous utilisez ce lien sans &callback=angular.callbacks._0
alors vous obtenez des données au format JSON pur et vous pouvez utiliser le module json
pour les convertir en dictionnaire python.
EDIT: code de travail
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'])
Production:
Mineral exploration in Botswana, China and Australia.