【问题标题】:Selenium doesn't show table content after ::beforeSelenium 在 ::before 之后不显示表格内容
【发布时间】:2021-09-21 23:37:57
【问题描述】:

我正在尝试用 BS4 和 Selenium 搜索巴西债券(BS4 本身收集的信息比 Selenium 还要少)。

(http://web.cvm.gov.br/app/esforcosrestritos/#/detalharOferta?ano=MjAyMQ%3D%3D&valor=MTU%3D&comunicado=MQ%3D%3D&situacao=MQ%3D%3D)

当我在 BeautifulSoup 之后打印网页时,::before 之后的表格不显示,我尝试在表格应该开始的地方使用 find_all('div', class_="col-lg-12"),我得到一个空数组。

有没有办法让该内容显示出来?我已经尝试过使用隐式等待,但信息也没有加载。

这是我的代码:

url = 'http://web.cvm.gov.br/app/esforcosrestritos/#/detalharOferta?ano=MjAyMQ%3D%3D&valor=MTU%3D&comunicado=MQ%3D%3D&situacao=MQ%3D%3D'
driver = webdriver.Chrome('C:/webdrivers/chromedriver.exe')
driver.get(url)
html = driver.page_source

soup = BeautifulSoup(html, 'html.parser')
tags = soup.find_all('div', class_="col-lg-12")
print(tags)

【问题讨论】:

    标签: python selenium-webdriver web-scraping beautifulsoup


    【解决方案1】:

    实际上,如果您不想使用Selenium/BeautifulSoup,可以发送POST 请求到:

    http://web.cvm.gov.br/app/esforcosrestritos/consultarOfertaController/consultarValorMobiliario
    

    同时提供正确的headers(如下例所示)。

    您可以获取表格,但是,表格标题是从以下位置加载的:

    http://web.cvm.gov.br/app/esforcosrestritos/application/message/i18n.js
    

    这是一个如何加载数据的示例:

    import requests
    
    
    headers = {
        "Content-Type": "application/json;charset=UTF-8",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
        "Origin": "http://web.cvm.gov.br",
        "Referer": "http://web.cvm.gov.br/app/esforcosrestritos/",
    }
    
    data = '{"ano":"2021","valorMobiliarioId":"15","comunicado":"1","situacao":"1","situacaoEncerrada":false,"situacaoAndamento":true,"tipoComunicado":"INICIAL"}'
    
    response = requests.post(
        "http://web.cvm.gov.br/app/esforcosrestritos/consultarOfertaController/consultarValorMobiliario",
        headers=headers,
        data=data,
    )
    
    print(response.json())
    

    【讨论】:

    • 这实际上很棒,但是给我的任务会有所不同,因为我必须使用 BS4/Selenium 和后来的 pandas 来处理数据。非常感谢您的见解!
    • @JoaoVilar 你仍然可以使用 pandas: 和 pd.json_normalize()。即:pd.json_normalize(response.json())
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多