如何在不指定 python 中的 Web 浏览器的情况下从网站中提取 table

How to extract a table from website without specifying the web browser in python

我正在尝试通过编写网络抓取 python 脚本并将其部署在 Azure Databrick 中,自动将数据从 ASX (https://www.asxenergy.com.au/futures_nz) 网站提取到我的数据库中。目前,我的脚本在 Visual Studio 代码中工作,但是当我尝试在数据块中 运行 它时,它崩溃了,抛出了下面的错误。

Could not get version for google-chrome with the command: google-chrome --version || google-chrome-stable --version || google-chrome-beta --version || google-chrome-dev --version

我相信我需要简化我的代码以获得 table 而无需提及我们的浏览器。

我的示例代码如下:

import time
from selenium import webdriver
from bs4 import BeautifulSoup
import requests
import pandas as pd
import sys
from datetime import datetime
from webdriver_manager.chrome import ChromeDriverManager

options = webdriver.ChromeOptions()
options.add_argument('headless')
browser = webdriver.Chrome(ChromeDriverManager().install())
#browser = webdriver.Chrome('C:/chromedriver',options=options)  # Optional argument, if not specified will search path.
browser.get('https://www.asxenergy.com.au/futures_nz')
time.sleep(3)
html = browser.page_source
soup = BeautifulSoup(html,'html.parser')
market_dataset = soup.find_all(attrs={'class':'market-dataset'})
market_dataset

我尝试使用下面的代码,只使用 request 包,但它失败了,因为它找不到 'market-dataset' div class.

import time
from selenium import webdriver
from bs4 import BeautifulSoup
import requests
import pandas as pd
import sys
from datetime import datetime
from webdriver_manager.chrome import ChromeDriverManager


URL = "https://www.asxenergy.com.au/futures_nz"
page = requests.get(URL)

soup = BeautifulSoup(page.content, "html.parser")
market_dataset = soup.findAll("div",href=True,attrs={'class':'market-dataset'})

谁能帮帮我。

此页面使用 JavaScript 从 https://www.asxenergy.com.au/futures_nz/dataset

加载 table

服务器检查它是否是 AJAX/XHR 请求所以它需要 header

 'X-Requested-With': 'XMLHttpRequest' 

但是你的 findAll("div",href=True, ... 试图找到 <div href="..."> 但这个页面没有它 - 所以我用 class="market-dataset"

搜索正常的 <div>

最少的工作代码。

import requests
from bs4 import BeautifulSoup

headers = {
#    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:98.0) Gecko/20100101 Firefox/98.0', 
    'X-Requested-With': 'XMLHttpRequest'     
}

URL = "https://www.asxenergy.com.au/futures_nz/dataset"
response = requests.get(URL, headers=headers)

soup = BeautifulSoup(response.content, "html.parser")
market_dataset = soup.findAll("div", attrs={'class':'market-dataset'})
print('len(market_dataset):', len(market_dataset))

结果:

len(market_dataset): 10