网页抓取隐藏内容

时间:2020-10-13 09:13:53

标签: web-scraping

我正在尝试从以下网站抓取价格数据: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')

1 个答案:

答案 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
3‬‬‬‬‬‬0‬‬‬‬‬‬ ‬‬‬‬‬‬S‬‬‬‬‬‬e‬‬‬‬‬‬p‬‬‬‬‬‬t‬‬‬‬‬‬e‬‬‬‬‬‬m‬‬‬‬‬‬b‬‬‬‬‬‬e‬‬‬‬‬‬r‬‬‬‬‬‬ ‬‬‬‬‬‬2‬‬‬‬‬‬0‬‬‬‬‬‬2‬‬‬‬‬‬0‬‬‬‬‬‬,‬‬‬‬‬‬ ‬‬‬‬‬‬0‬‬‬‬‬‬2‬‬‬‬‬‬:‬‬‬‬‬‬0‬‬‬‬‬‬5‬‬‬‬‬‬p‬‬‬‬‬‬m
S$ 1‬‬‬‬.‬‬‬‬7‬‬‬‬3
S$ 2‬‬‬.‬‬‬0‬‬‬2
S$ 2‬‬‬.‬‬‬0‬‬‬6
N.A.
S$ 2‬‬‬‬‬‬.‬‬‬‬‬‬6‬‬‬‬‬‬1
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文件:

enter image description here