【问题标题】:Parsed HTML using Python of a web page is different than the actual page使用 Python 解析的 HTML 网页与实际页面不同
【发布时间】:2020-11-13 17:10:06
【问题描述】:

我需要从https://app.cpcbccr.com/AQI_India/ 的表中获取并存储 PM2.5 和 PM10 值。我使用 BeautifulSoup4 来抓取网页,但我得到的解析后的 H​​TML 与实际页面不同。例如,我得到了这个

而不是这个。

我编写了获取表格行和表格数据等所需的代码,但是由于我解析的 HTML 缺少表格正文的行,它找不到它们,所以现在我只有这个来查看我解析的 HTML :

from bs4 import BeautifulSoup
import requests
import pandas as pd

url = "https://app.cpcbccr.com/AQI_India/"
soup = BeautifulSoup(requests.get(url).text, 'html.parser')

with open("Desktop/soup.html", "a") as dumpfile:
    dumpfile.write(str(soup))

我怎样才能得到所有的桌子?提前致谢。

【问题讨论】:

    标签: python-3.x web-scraping beautifulsoup html-parsing


    【解决方案1】:

    试试下面的代码。我已经使用 API 方式为https://app.cpcbccr.com/AQI_India/ 实现了数据抓取脚本。使用请求,您可以点击 API,它会发回您必须转换为 JSON 格式的结果。

    import json
    import requests
    from urllib3.exceptions import InsecureRequestWarning
    requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
    def scrap_air_quality_index():
        
        payload = 'eyJzdGF0aW9uX2lkIjoic2l0ZV8zMDEiLCJkYXRlIjoiMjAyMC0wNy0yNFQ5OjAwOjAwWiJ9:'
    
        session = requests.Session()
        response = session.post('https://app.cpcbccr.com/aqi_dashboard/aqi_all_Parameters',data=payload,verify=False)
        result = json.loads(response.text) 
        extracted_metrics = result['metrics']
        print(extracted_metrics)
    

    我已经检查了网络部分中的 API 调用,在该部分中我得到了 API url https://app.cpcbccr.com/aqi_dashboard/aqi_all_Parameters,我使用它来使用额外的强制参数获取数据,这是一个有效负载,没有这个你将无法获得数据。您可以利用脚本并将数据保存(参考屏幕截图)添加到 .csv 或 excel 文件。

    1. API URL 的图像
    2. 指标的 json 结果图像。

    【讨论】:

    • 这很有帮助,谢谢。我还有一个问题。我正在尝试获取超过一天的数据。我可以更改日期,但只要保持payload 不变,数据就不会改变。有没有办法自动获取payload
    • 在这种情况下,您必须使用 Beautiful soup 方式,因为此 API 请求方法是 POST,所有内容都应事先提供以获取响应。
    • 或者有什么方法可以预先收集和存储每天的有效负载,然后我可以相应地发送 POST 请求?因为我找不到任何使用 BS4 的方法。
    猜你喜欢
    • 2011-03-25
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2012-09-27
    • 1970-01-01
    • 2023-04-01
    • 2014-07-05
    • 2020-09-02
    相关资源
    最近更新 更多