公開サイトからデータを取得しようとしています asx.com.a
ページ http://www.asx.com.au/asx/research/company.do#!/ACB/details には、クラス 'view-content'を持つdiv
が含まれています。私が必要とする情報があります:
しかし、Pythonのurllib2.urlopen
を介してこのページを表示しようとすると、divが空になります。
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>
プログラムでそのdivのコンテンツにアクセスすることは可能ですか?
編集:コメントのとおり、コンテンツはAngular.js
経由でレンダリングされているようです。 Pythonを介してそのコンテンツのレンダリングをトリガーすることは可能ですか?
このページは、JavaScriptを使用してサーバーからデータを読み取り、ページに入力します。
chrome-「XHR」または「JS」リクエストの「ネットワーク」タブを参照してください。
このURLを見つけました
このURLはほとんどすべてのデータをJSON形式で提供します
しかし、このリンクを&callback=angular.callbacks._0
なしで使用すると、純粋なJSON形式のデータが得られ、json
モジュールを使用してpython辞書に変換できます。
EDIT:作業コード
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'])
出力:
Mineral exploration in Botswana, China and Australia.