我正在尝试从以下网站抓取价格数据:https://fuelkaki.sg/home
但是,数据似乎不在页面的HTML代码中。经过检查,数据似乎嵌套在标签中,例如在零售商的Caltex下嵌套,以及类似地在价格数据的多个嵌套标签下嵌套,我无法使用以下代码进行抓取(没有结果可找到)。
任何帮助将不胜感激。
import requests
from bs4 import BeautifulSoup
URL = 'https://fuelkaki.sg/home'
page = requests.get(URL)
soup = BeautifulSoup(page.content, 'html.parser')
results = soup.find('div', class_='fuel-name')
答案 0 :(得分:0)
该表格位于JS
(JavaScript)的后面,因此BeautifulSoup
看不到它。
这是我的处理方式:
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.headless = False
driver = webdriver.Chrome(options=options)
url = "https://fuelkaki.sg/home"
driver.get(url)
time.sleep(3)
element = driver.find_element_by_xpath('//*[@class="table"]')
print(element.text)
driver.close()
输出:
Diesel
92
95
98
Others
(V-Power, etc)
Caltex
30 September 2020, 02:05pm
S$ 1.73
S$ 2.02
S$ 2.06
N.A.
S$ 2.61
and so on...
编辑:
如果要在Dataframe
中使用表格,请尝试以下操作:
import time
import pandas as pd
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.headless = False
driver = webdriver.Chrome(options=options)
url = "https://fuelkaki.sg/home"
driver.get(url)
time.sleep(3)
html = driver.page_source
soup = BeautifulSoup(html, "html.parser").select_one(".table")
df = pd.read_html(str(soup))
df = pd.concat(df).rename(columns={"Unnamed: 0": ""})
df.to_csv("fuel_data.csv", index=False)
driver.close()
输出包含表数据的.csv
文件: