网页抓取 - 如何通过 Angular.js 访问在 JavaScript 中呈现的内容?

2024-04-03

我正在尝试从公共网站抓取数据asx.com.au http://www.asx.com.au

这一页http://www.asx.com.au/asx/research/company.do#!/ACB/details 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 触发该内容的渲染?


本页使用JavaScript从服务器读取数据并填充页面。

我看到你使用开发者工具Chrome- 参见选项卡Network on XHR or JS要求。

我找到了这个网址:

该 url 提供的所有数据几乎都是 JSON 格式

但如果您使用此链接时没有&callback=angular.callbacks._0然后你得到纯 JSON 格式的数据,你可以使用json模块将其转换为 python 字典。


EDIT:工作代码

import urllib2
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'])

Output:

Mineral exploration in Botswana, China and Australia.

编辑 (2020.12.23)

这个答案已经有近 5 年历史了,是为 Python2 创建的。现在在Python3中它需要urllib.request.urlopen() or requests.get()但真正的问题是,五年来这个页面的结构和技术发生了变化。网址(在问题和答案中)不再存在。这个页面需要新的分析和新的方法。

有问题的是网址

http://www.asx.com.au/asx/research/company.do#!/ACB/details http://www.asx.com.au/asx/research/company.do#!/ACB/details

但当前页面使用 url

https://www2.asx.com.au/markets/company/acb https://www2.asx.com.au/markets/company/acb

它使用不同的网址AJAX,XHR

https://asx.api.markitdigital.com/asx-research/1.0/companies/acb/about https://asx.api.markitdigital.com/asx-research/1.0/companies/acb/about
https://asx.api.markitdigital.com/asx-research/1.0/companies/acb/announcements https://asx.api.markitdigital.com/asx-research/1.0/companies/acb/announcements
https://asx.api.markitdigital.com/asx-research/1.0/companies/acb/key-statistics https://asx.api.markitdigital.com/asx-research/1.0/companies/acb/key-statistics
etc.

您可以使用以下方式找到更多网址DevTools in Chrome/Firefox (tab: Network, 筛选:XHR)

import urllib.request
import json

# new url      
url = 'https://asx.api.markitdigital.com/asx-research/1.0/companies/acb/about'

# read all data
page = urllib.request.urlopen(url).read()

# convert json text to python dictionary
data = json.loads(page)

print(data['data']['description'])

Output:

Minerals exploration & development
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

网页抓取 - 如何通过 Angular.js 访问在 JavaScript 中呈现的内容? 的相关文章

随机推荐

  • 简单登录返回空白页

    我正在学习 PHP 并且制作了一个简单的登录脚本 但问题是它仅将我重定向到空白页面 如果用户凭据正确 它的意思是重定向到index php 但情况显然并非如此 还有验证 如果用户输入空白 则会返回错误 这似乎没有被执行 登录 php
  • 使用 rdmsr/rdpmc 提高分支预测精度

    我试图了解分支预测单元在 CPU 中如何工作 我用过papi还有linux的perf events但他们都没有给出准确的结果 对于我的情况 这是我的代码 void func int arr int sequence len for int
  • 在c中获取浮点数的指数

    抱歉 如果已经有人问过这个问题 并且我已经看到了提取浮点数指数的其他方法 但这就是给我的 unsigned f2i float f union unsigned i float f x x i 0 x f f return x i 我无法理
  • css4 中可以使用父选择器吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 Here is fiddle http jsfiddle net uday redI V9F7d 7 我有 2 个 div 一个是外盒 另一个是
  • Matplotlib 在 vi​​rtualenv 中不显示图形

    我已经在我的 virtualenv 中安装了 pip matplotlib 并且正在尝试绘制一个简单的图表 我使用 Eclipse 和 PyDev 当我从 Eclipse 运行脚本时 它根本不显示任何图形 我已经尝试过其他问题中提出的建议
  • 是否可以在 Cloudformation 中更新 Elastic Beanstalk 环境而不影响部署到其中的版本?

    我正在使用 Cloudformation 创建 Elastic Beanstalk 环境 我必须创建一个 ApplicationVersion 只是为了启动它并将其输入到环境的定义中 我创建其他应用程序版本并以其他方式将它们部署到集群 Co
  • C 线程编程 - 增加共享变量

    嘿伙计们 所以我正在尝试温习我的 C 线程 我发现的一个问题是 给定一个全局变量 int x 0 实现函数 void 无用 int n 它创建 n 个线程 在循环中将 x 加 1 每个线程在 x 达到 100 时终止 我只是没有掌握线程 需
  • 在结账页面和 WooCommerce 数据字段中添加取货地点自定义字段

    我在另一个类似问题的答案中找到了以下解决方案 根据 WooCommerce 中的自定义字段值将文本添加到订单摘要 https stackoverflow com questions 45906636 add text to order su
  • 如何将多列传递给php中的变量

    我正在开发一个项目 该项目需要将多个列内容传递给 php 变量 我能够选择一列内容并将其传递给变量 但在多列上失败 myEMPNEM sqlNEM SELECT first name middle name last name job ti
  • 如何在PowerShell中将数据导出为CSV?

    foreach computer in computerlist if Test Connection Cn computer BufferSize 16 Count 1 ea 0 quiet foreach file in REMOVE
  • 取消选中所有使用 *ngFor 创建的复选框

    我有一个表 其中有一列 其中每行包含一个复选框 使用 ngFor 单击按钮后 我想取消选中所有复选框 我尝试使用 ngModel boxChecked 对于每个复选框 并在我的按钮单击调用的方法中将该值设置为 false 但这会导致每当我仅
  • AngularJS 无法在发布模式下工作(缩小)

    我的项目中有 AngularJS 和 Bootstrap 的 Angular 指令 这两个指令都是通过 Nuget 添加的 When 编译调试 真 一切都很好 但是一旦我改变了编译调试 to false Angular 停止工作 并且我在
  • Objective-C 中的 __OBJC__

    什么是 OBJC 在 Objective C 中是什么意思 import
  • 如何在textBlock上设置点击效果并打开新的WPF窗口?

    您好 我是 WPF 新手 我正在努力学习它 所以现在我想知道如何在列表框中的文本块上创建 onclick 效果 我想单击列表框中的任何项目并打开一个新窗口 我一定做错了什么 但我不知道那是什么 到目前为止我有以下内容
  • 如何在Android WebView中获取加载的网页标题?

    我在应用程序中使用 WebView 我需要根据用户所在的页面更改应用程序标题 我怎样才能在 Android WebView 中做到这一点 我通过以下行在 iPhone 中执行此操作 self title webPage stringByEv
  • 如何在 C# 中截断列表?

    我知道在 python 中你可以做类似的事情myList 1 20 但是C 中有类似的东西吗 var itemsOneThroughTwenty myList Take 20 var itemsFiveThroughTwenty myLis
  • 无法将 8 位地址移至 16 位寄存器

    我正在尝试分配变量来注册 代码如下 ORG 100h var1 DB 10 var2 DB 20 MOV BX var1 error operands do not match 16 bit register and 8 bit addre
  • 查询合并连续时间记录

    我有一个这样的表 id START DATE end date 1 01 01 2011 01 10 2011 2 01 11 2011 01 20 2011 3 01 25 2011 02 01 2011 4 02 10 2011 02
  • 隐藏打印文本

    我这里有一个打印页 如何隐藏底部显示 关闭窗口 和 打印页面 的链接 使其不被打印在打印页面上 你可以使用CSS media 规则 http www w3 org TR CSS21 media html为了这 首先 添加一个类noprint
  • 网页抓取 - 如何通过 Angular.js 访问在 JavaScript 中呈现的内容?

    我正在尝试从公共网站抓取数据asx com au http www asx com au 这一页http www asx com au asx research company do ACB details http www asx com