【问题标题】:Scraping page with javascript filled table使用 javascript 填充表抓取页面
【发布时间】:2017-07-09 18:15:55
【问题描述】:

我正在尝试抓取 this 页面以获取生成数据,以便稍后传递给解析器。

我的问题是该表由多个向另一台服务器发出请求的脚本填充。 Beautiful Soup 抓取页面但返回未执行的 javascript。所以我尝试使用 selenium 在浏览器中打开页面,然后抓取填充的表格。

当我运行我的代码时,Firefox 加载页面然后关闭,但 BS 仍然返回页面而没有填充表格。我尝试在完全加载后使用 Web 控制台检查页面,我可以看到我需要的数据,即一个数据点包含在 class=“r11”的 div 标签中。搜索此标签返回无。

我的想法是,要么 a) 我使用了错误的 selenium,要么 b) 页面的格式被丢掉了,因为它看起来与多个“子文档”嵌套得很深(不确定正确的术语)。

from selenium import webdriver  
from selenium.common.exceptions import NoSuchElementException  
from selenium.webdriver.common.keys import Keys  
from bs4 import BeautifulSoup

arg_therm = ('http://portalweb.cammesa.com/MEMNet1/Pages/Informes%20por%20'
        'Categor%C3%ADa/Operativos/VisorReporteSinComDesp_minimal.asp'
        'x?hora=0&titulo=Despacho%20Generacion%20Termica&reportPath='
        'http://lauzet:5000/MemNet1/ReportingServices/Despacho'
        'GeneracionTermica.rdl--0--Despacho+Generaci%c3%b3n+T%c3%a9rmica')


browser = webdriver.Firefox()  
browser.get(arg_therm)  
html_source = browser.page_source  

browser.quit()

soup=BeautifulSoup(html_source,'lxml')

print(soup.prettify())

print(soup.find('div', {"class": "r11"}))

【问题讨论】:

    标签: javascript html python-3.x selenium web-scraping


    【解决方案1】:

    尝试使用以下代码获取所需的表格:

    from selenium.webdriver.support.ui import WebDriverWait as wait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    browser = webdriver.Firefox()  
    browser.get(arg_therm)
    
    browser.switch_to.frame(browser.find_element_by_xpath('//iframe[starts-with(@name, "RportFramectl00")]'))
    browser.switch_to.frame('report')
    
    table_cells = wait(browser, 10).until(EC.presence_of_all_elements_located((By.CLASS_NAME, "r11")))
    for cell in table_cells:
        print(cell.text)
    

    这应该等待所需元素的出现并返回这些 DIV 的列表

    【讨论】:

    • 这段代码很好用。它准确地返回了我需要的信息。
    猜你喜欢
    • 1970-01-01
    • 2022-11-17
    • 2020-09-27
    • 1970-01-01
    • 2013-06-02
    • 2011-12-24
    相关资源
    最近更新 更多