首页 > 编程问答 >Python Beautiful Soup 不加载表值

Python Beautiful Soup 不加载表值

时间:2024-07-28 09:12:29浏览次数:7  
标签:python web-scraping beautifulsoup

我是美丽汤的新手,不确定如何从该网站为每个州(新南威尔士州、维多利亚州、昆士兰州、南澳大利亚州)添加“解决”栏:

https://www.asxenergy.com.au /futures_au

似乎没有显示数值数据。

我的起始代码是:

from bs4 import BeautifulSoup
from urllib.request import urlopen

url = "https://www.asxenergy.com.au/futures_au"
page = urlopen(url)
html = page.read().decode("utf-8")
soup = BeautifulSoup(html, "html.parser")
print(soup.get_text())


是对的,表格数据没有直接包含在 HTML 中。它很可能是使用 JavaScript 动态加载的。Beautiful Soup 仅解析 HTML,不会执行 JavaScript。

为了从该网站中提取数据,需要使用能够呈现 JavaScript 的工具。以下是两种流行的选择:

1. 使用 Selenium 或 Playwright 等浏览器自动化工具:

这些工具可以让控制一个真实的浏览器,例如 Chrome 或 Firefox。可以加载网站,等待 JavaScript 执行,然后使用 Beautiful Soup 解析生成的 HTML。

这是一个使用 Selenium 的示例:

```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from bs4 import BeautifulSoup

url = "https://www.asxenergy.com.au/futures_au"

# 使用合适的 webdriver 路径替换下面的路径 driver = webdriver.Chrome(executable_path="/path/to/chromedriver") driver.get(url)

# 等待表格加载完成 table = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "datatable_au")) )

# 获取页面源代码 html = driver.page_source

# 使用 Beautiful Soup 解析 HTML soup = BeautifulSoup(html, "html.parser")

# 提取表格数据 # ...

# 关闭浏览器 driver.quit() ```

2. 使用可以执行 JavaScript 的 HTTP 库,例如 Requests-HTML:

Requests-HTML 库提供了一种更轻量级的解决方案,无需启动完整的浏览器。它使用 Chromium 的无头模式来执行 JavaScript。

这是一个使用 Requests-HTML 的示例:

```python from requests_html import HTMLSession from bs4 import BeautifulSoup

url = "https://www.asxenergy.com.au/futures_au"

session = HTMLSession() response = session.get(url)

# 渲染 JavaScript response.html.render()

# 使用 Beautiful Soup 解析 HTML soup = BeautifulSoup(response.html.html, "html.parser")

# 提取表格数据 # ... ```

提取表格数据:

在使用上述任何一种方法加载了完整的 HTML 后,可以使用 Beautiful Soup 提取表格数据。例如,可以使用 find 方法找到表格,然后迭代行和单元格来提取数据。

# 查找表格
table = soup.find("table", id="datatable_au")

# 迭代表格行
for row in table.find_all("tr")[1:]: # 跳过标题行
    cells = row.find_all("td")
    state = cells[0].text.strip()
    settlement = cells[1].text.strip()
    print(f"State: {state}, Settlement: {settlement}")

请注意,这只是一个示例,可能需要根据实际的 HTML 结构调整代码。

标签:python,web-scraping,beautifulsoup
From: 78802780

相关文章

  • c语言模拟Python的命名参数
    最近在书里看到的,让c语言去模拟其他语言里有的命名函数参数。觉得比较有意思所以记录一下。目标众所周知c语言里是没有命名函数参数这种东西的,形式参数虽然有自己的名字,但传递的时候并不能通过这个名字来指定参数的值。而支持命名参数的语言,比如python里,我们能让代码达到这种效......
  • 乌尔都语 Tts 可与 python 一起使用
    我想为乌尔都语创建TTS有什么帮助吗?我发现很少有模特拥抱着脸TheUpperCaseGuy/Guy-Urdu-TTSpocketmonkey/speecht5_tts_urduTalha185/speecht5_finetuned_urdu_TTS但我无法从文本创建或生成高质量的语音任何人都可以帮忙吗???importtorchfromtransformersimp......
  • 有没有办法在Python中使用OpenCV在边界框后面画一条线?
    我正在为我的本科论文编写一个应用程序,该应用程序从根本上允许使用OpenCV库跟踪视频源中的多个对象。为了进一步发展这个想法,我希望能够在屏幕上画一条线,显示边界框在我正在跟踪的对象周围的历史记录。我注意到没有排序用于执行此操作的内置函数,因此任何有关制作此类内容的......
  • 如何向 python pandas 数据透视表添加过滤器? (pd.read_excel)
    我正在尝试使用pandas库在python中重新创建我在Excel中制作的数据透视表。我试图用时间段作为过滤器来总结超过500k行的OD总行程数据。在Excel上,我只会执行行(O)、列(D)、值(行程)、过滤器(时间)。到目前为止,在python上我只有索引、列、值、aggfunc,但我不知道如何过滤。有......
  • 标量添加中的 Python 溢出警告
    我想执行一个简单的操作:b+g+rb,g,r变量是整数并且值低于256。我收到溢出警告和错误的结果。问题是操作很简单(结果不高于765),我不应该收到溢出警告这是我的代码:importcv2ascvimportnumpyasnpimgname='r_hh_classic.png'img=cv.imread(imgname)h,w,_=......
  • 在 Python 中读取部分 MP3 文件时处理“对于可用位计数来说太大”错误
    我正在尝试读取MP3文件的特定部分,但遇到错误:[src/libmpg123/layer3.c:INT123_do_layer3():1771]error:part2_3_length(1376)toolargeforavailablebitcount(760)可以访问音频文件此处我的环境是使用此Docker映像设置的:pytorc......
  • Python SQLAlchemy 2.0 使用 dataclass_transform 非必需字段类型
    我刚刚在一个新项目上安装了SQLAlchemy2.0,我正在尝试使我的模型尽可能类型安全。通过使用@typing_extensions.dataclass_transform,我已经能够实现我想要实现的大部分目标类型检查,但是当前所有字段都被标记为不需要。例如:@typing_extensions.dataclass_tran......
  • 当读取字节时,Python 将 \n 解释为 0xd0
    换行符被解释为Ð(0xd0)而不是(0x0a),我真的不知道如何解决这个问题。我也不知道从哪里开始。当尝试使用此代码时,它将0x0a读为0xd0。withopen(path,"rb")asroot:b_arr=root.read()+b""print("Processing...")buffer=""b_arr......
  • 在Python 3中获取范围的特定形式
    当获取range(1,100)时,我得到:[1,2,3,4,5...99]我需要像这个范围的zip之类的东西:[50,49,51,48,52,47,53...99]如何获取它?背景:这都是关于比特币谜题66的。首先我做了对过去已知的私钥进行线性回归预测,直到第65题为止。我......
  • Python:如何使用pyaudio或sounddevice等库进行自动录音?
    我想做一个项目,需要满足以下录音要求:程序启动后,会在后台不断检测麦克风的声音,当声音分贝大于一定值时打开录音流级别,当分贝低于一定级别时关闭录音流并保存为wav文件。我知道原理,但我无法使用这些库来实现。我想实现以上结果使用Python实现自动录音以下代......