我正在尝试从公共网站asx.com.au
抓取数据页面http://www.asx.com.au/asx/research/company.do#!/ACB/details包含div
类,其中包含“view-content”类,其中包含我需要的信息:
但是当我尝试通过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触发该内容的呈现?
答案 0 :(得分:19)
此页面使用JavaScript从服务器和填充页面读取数据。
我看到您在chrome中使用了开发人员工具 - 请参阅“XHR”或“JS”请求中的“网络”标签。
我找到了这个网址
此网址提供几乎采用JSON格式的所有数据
但是,如果您使用此链接而不使用&callback=angular.callbacks._0
,那么您将获得纯JSON格式的数据,并且您可以使用json
模块将其转换为python字典。
编辑工作代码
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.