【问题标题】:Parce data, Python解析数据,Python
【发布时间】:2019-04-09 07:43:35
【问题描述】:

我对 Python 很感兴趣。我需要解析来自 Fred (https://fred.stlouisfed.org/series/A191RI1A225NBEA) 的数据。所以,我需要让 Python 进入这个网站,然后单击“下载”按钮,然后单击“CSV(数据)”按钮并将这些数据保存在 Python 中。实际上,这个任务有一个很大的问题,我尝试使用 from selenium:

selenium.webdriver.common.keys import Keys
browser = webdriver.Chrome('/Users/davidabramyan/Downloads/chromedriver 3')
browser = browser.get('https://fred.stlouisfed.org/series/A191RI1A225NBEA')
elm = browser.find_element_by_link_text('Download')
browser.implicitly_wait(5)
elm.click()

并使用 BeautifulSoup:

response = urllib.request.urlopen(url)
return response.read()

def parse(html):
soup = BeautifulSoup(html, 'lxml')
table = soup.find('span', class_='pull-right col-xs-1')
rows = table.find('fg-download-menu')
print(table.prettify())

def main():
parse(get_html('https://fred.stlouisfed.org/series/A191RI1A225NBEA#0'))

if __name__ == '__main__':
main()

但它不起作用。我认为 Beautifulsoup 更好,但我真的不明白该怎么做。你可以帮帮我吗?提前谢谢!

【问题讨论】:

    标签: python selenium parsing beautifulsoup


    【解决方案1】:

    您不能使用 BeautifulSoup,因为“CSV(数据)”的下载 url 是由 ajax 生成的

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.support.ui import WebDriverWait
    
    browser = webdriver.Chrome('/Users/davidabramyan/Downloads/chromedriver 3')
    # make sure above is chromedriver executable path not directory
    wait = WebDriverWait(browser, 10)
    browser.get('https://fred.stlouisfed.org/series/A191RI1A225NBEA')
    
    dlButton = browser.find_element_by_id("download-button")
    dlButton.click()
    wait.until(lambda driver: browser.execute_script("return $('#download-data-csv').attr('href') != '#'"))
    dlButton = browser.find_element_by_id("download-data-csv")
    dlButton.click()
    
    # get url to download with python
    # csv_download_url = dlButton.get_attribute('href')
    # csv_file = urllib2.urlopen(download)
    # ....
    

    【讨论】:

    • 是的!其作品!谢谢!还有一个问题:那么如果是ajax就不可能解析数据?我怎么能理解这是 ajax(对不起,愚蠢的问题)@ewwink
    • 还有一个,通过这段代码我可以从链接安装文件,但是如果我不知道下载文件的名称,如何在Python中自动导入?
    • 使用 bs4 可能但并不容易,要知道它是由 ajax 设置的,只需在浏览器控制台$('#download-data-csv').attr('href') 中运行它就会给你# 作为 url,现在单击下载按钮然后再次运行上一个命令并它会给你"/graph/fredgraph.csv?bgcolor.....
    • 如果不想下载,从$('#download-data-csv').attr('href')获取url,用python下载
    • 更新代码,获取python中使用的csv下载url
    猜你喜欢
    • 2012-03-25
    • 2018-08-25
    • 2014-03-18
    • 2013-05-16
    • 2011-07-08
    • 2017-03-03
    • 2017-05-23
    • 2019-03-02
    • 2014-11-12
    相关资源
    最近更新 更多