网页抓取过程中有些div没有出现

问题描述 投票:0回答:3

我是网络抓取新手,我尝试从该网站抓取内容:INFOBANJIR JPS SELANGOR

这是我正在尝试抓取的内容: ONLINE RAINFALL DATA (MM)

这是我的代码:

from bs4 import BeautifulSoup
import requests

url = 'http://infobanjirjps.selangor.gov.my/flood-gauge-data.html?districtId=4&lang=en'
page = requests.get(url)

soup = BeautifulSoup(page.text, 'html')

soup.find_all('table', id='tableRainfall')

但是,输出仅显示这一点 Output

然后,我尝试使用 id = 'tableDataRainfall' 来查找 div,但输出仍然显示与之前相同的内容。

分区内的html好像丢失了。如果这是一个愚蠢的问题,我很抱歉,但我只是想知道为什么。预先感谢您!

python html web-scraping beautifulsoup
3个回答
0
投票

我很乐意帮助您从给定网站上抓取您感兴趣的内容。但是,由于网站本身的潜在限制或限制,我无法访问特定内容。我将提供一般指导和最佳实践,您可以根据自己的具体情况进行调整。

了解动态内容渲染:

JavaScript 生成的内容:如果您尝试抓取的内容是使用 JavaScript 动态生成的,则 HTML 结构在初始页面加载中可能不易使用。这意味着直接在获取的 HTML 上使用 BeautifulSoup 可能不会产生所需的结果。 动态内容抓取的方法:

浏览器自动化(Selenium):

使用 pip install selenium webdriver_manager 安装 selenium 和 webdriver_manager。 选择合适的浏览器驱动程序(例如,Chrome 的 chromedriver)并使用 webdriver_manager.ChromeDriverManager().install() 设置 WebDriver 路径。 创建一个 Selenium WebDriver 实例来控制浏览器并模拟用户交互。 使用 JavaScript 执行方法(例如,execute_script)等待内容动态加载。 内容可用后,继续使用 BeautifulSoup 或其他方法进行抓取。 蟒蛇

import time 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 driver = webdriver.Chrome() driver.get(url) # Wait for the content to load (replace with appropriate selectors/conditions) WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "tableRainfall")) ) soup = BeautifulSoup(driver.page_source, 'html') tables = soup.find_all('table', id='tableRainfall') # Process the scraped content
谨慎使用代码。
基于 API 的方法(如果可用):

检查网站是否提供 API 来访问您所需的数据。 API 专为编程式数据检索而设计,通常提供更易于解析的结构化格式(例如 JSON、XML)。 如果 API 可用,请使用适当的库或工具(例如请求)来发出 API 请求并处理响应数据。 重要考虑因素:

尊重网站条款和条件:避免因过多请求或违反抓取准则而导致网站超载。 处理潜在错误:实施错误处理机制,以妥善处理内容可能不可用或抓取过程遇到问题的情况。 注意法律和道德方面:确保您的抓取活动符合所有适用的法律和法规。 请记住将“tableRainfall”等占位符替换为您所定位的网站中的实际 ID 或选择器。根据网站的结构和您要提取的具体内容调整代码。


0
投票
请参阅此

网站,了解有关动态网页抓取的一些信息。 requests

beautifulSoup
 不足以在网站上运行 JavaScript;您需要更强大的工具。


0
投票
您在页面上看到的数据是通过 JavaScript 从不同的 URL 加载的(因此 BeautifulSoup 看不到它)。以下是如何加载此站点信息的示例:

import pandas as pd import requests api_url = "http://infobanjirjps.selangor.gov.my/JPSAPI/api/StationRainfalls/GetRFAllStationData/1" data = requests.get(api_url).json() for d in data["stations"]: for r in d.pop("previousReadings"): d[r["dataDate"]] = r["dailyRainfall"] df = pd.DataFrame(data["stations"]) print(df)
打印:

markerType id stationId stationName districtName lastUpdate hourlyRainfall todayRainfall stationCode referenceName mode z1 z2 z3 batteryLevel stationStatus latitude longitude gsmNumber 21/02/2024 22/02/2024 23/02/2024 24/02/2024 25/02/2024 26/02/2024 27/02/2024 0 Rainfall 160 3214056 SRI AMAN KUALA SELANGOR 27/02/2024 02:30:00 0 0 BKSL0004 SRIAMAN True True True True 12.9 1 3.237748 101.477205 601592019217 0.0 1.0 0.0 8 0 0.0 0 1 Rainfall 161 3414032 RANTAU PANJANG KUALA SELANGOR 27/02/2024 02:30:00 0 0 BKSL0001 RPANJANG True True True True 12.5 1 3.401811 101.441718 60122024643 2.5 1.0 6.5 3 0 0.0 0 2 Rainfall 217 3313045 KG. ASAHAN KUALA SELANGOR 27/02/2024 02:30:00 0 0 BKSL0006 KGASAHAN True True True True 13.0 1 3.366076 101.346635 60122674195 0.5 0.0 6.0 0 0 0.0 0 3 Rainfall 220 3312046 TELUK PENYAMUN (PINTU AIR) KUALA SELANGOR 27/02/2024 02:30:00 0 0 BKSL0002 KUALASELANGOR True True True True 12.9 1 3.332439 101.259526 60122065279 0.0 0.0 122.5 0 9 0.5 0 4 Rainfall 219 3313070 PARIT MAHANG KUALA SELANGOR 27/02/2024 02:45:00 0 0 BKSL0005 PARITMAHANG True True True True 12.9 1 3.297236 101.378453 601592855131 0.0 0.0 1.0 1 0 0.0 0 5 Rainfall 249 3411017 STOR J.P.S TG. KARANG KUALA SELANGOR 27/02/2024 02:30:00 0 0 BKSL0011 STORJPSTGKARANG True True True True 12.7 1 3.423624 101.171665 60172175936 0.0 0.0 2.0 0 0 0.0 0 6 Rainfall 250 3411018 P/A PEKAN TG. KARANG KUALA SELANGOR 27/02/2024 02:30:00 0 0 BKSL0009 PATGKARANG True True True True 12.9 1 3.428279 101.176409 60172175891 0.0 0.0 1.5 0 0 0.0 0 7 Rainfall 252 3412001 IBU BEKALAN SG. TENGI KUALA SELANGOR 27/02/2024 02:30:00 0 0 BKSL0018 IBUBKLSGTENGI True True False True 12.8 1 3.482524 101.218658 60172175941 0.0 0.0 0.5 0 0 0.0 0 8 Rainfall 253 3312047 P/A SG. YU 1 KUALA SELANGOR 27/02/2024 02:30:00 0 0 BKSL0010 PASGYU1 True True True True 12.9 1 3.363235 101.239092 60172175897 0.5 0.0 75.0 0 0 0.0 0 9 Rainfall 269 3313060 LADANG SG. BULOH KUALA SELANGOR 27/02/2024 02:30:00 0 0 BKSL0012 LDGSGBULOH True True True True 12.6 1 3.308964 101.31875 60122634952 0.0 0.0 28.5 0 0 0.0 0 10 Rainfall 270 3213057 LADANG BRAUNSTON, JERAM KUALA SELANGOR 27/02/2024 02:30:00 0 0 BKSL0013 LDGBRAUNSTON True True True True 12.7 1 3.24891 101.315949 60122634955 0.0 0.5 15.0 0 0 0.0 0 11 Rainfall 278 3314001 RUMAH PAM JAYA SETIA KUALA SELANGOR 27/02/2024 02:30:00 0 0 BKSL0015 RPJS True True True True 12.9 1 3.369056 101.410889 60126748104 18.5 0.5 1.5 2 0 0.0 0 12 Rainfall 279 3411016 PARIT 1 SG BURONG KUALA SELANGOR 26/02/2024 20:00:00 0 0 BKSL0016 PRT1SB True True True True 13.0 3 3.455814 101.146 60124594182 0.0 5.0 6.5 0 0 0.0 0 13 Rainfall 877 0210671RF KG. LUBUK JAYA KUALA SELANGOR 27/02/2024 02:30:00 0 0 BKSL0023 KG LUBOK JAYA True True True True 12.8 1 3.385003 101.299811 601592188690 0.0 0.0 136.0 0 0 0.0 0 14 Rainfall 878 0200111RF KG. BUKIT KERAYONG KUALA SELANGOR 27/02/2024 02:30:00 0 0 BKSL0022 KG BKT KERAYUNG True True True True 13.1 1 3.197979 101.400665 601592728502 0.0 0.0 26.0 0 0 0.0 0
    
© www.soinside.com 2019 - 2024. All rights reserved.