【问题标题】:web scraping with python, with navigation controller使用 python 抓取网页,带有导航控制器
【发布时间】:2017-10-07 03:29:07
【问题描述】:

我是 python 新手,我需要有关网页抓取代码的帮助,以便每周保存一张动态地图。 这是我感兴趣的site。 目的是进入页面,选择季节,选择周,然后将图像下载到本地文件夹。我将使用该图像集成一个使用 SAS 的自动每周报告。

提前谢谢你!

【问题讨论】:

  • 您需要什么样的帮助?
  • 我需要代码方面的帮助...所以我可以在 spyder 上运行它来保存 .png 文件。
  • 到目前为止你尝试过什么?您应该提供某种代码示例,显示您到底在哪里遇到了问题。没有它,你不可能在这里得到任何帮助。
  • 我已经回答了这个问题。感谢您的反馈。
  • 这里是代码

标签: python web-scraping sas report


【解决方案1】:
import sys
import os
import time
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
 from selenium import webdriver
import arrow

BASE_URL = 'https://gis.cdc.gov/grasp/fluview/main.html'
DOWNLOAD_PATH = "/Users/"

def closeWebDriver(driver):

    if os.name == 'nt':
        driver.quit()
    else:
        driver.close()

def getImage():

    profile = FirefoxProfile()

    profile.set_preference("browser.download.panel.shown", False)
    profile.set_preference("browser.helperApps.neverAsk.openFile","image/png")
    profile.set_preference("browser.helperApps.neverAsk.saveToDisk", "image/png")
    profile.set_preference("browser.download.folderList", 2);
    profile.set_preference("browser.download.dir", DOWNLOAD_PATH)

    driver = webdriver.Firefox(firefox_profile=profile)

    driver.get(BASE_URL)

    time.sleep(5)

    if not isValidTimeFrame(driver):
        print('Not the time to download yet!')
        closeWebDriver(driver)
        return

    selectFirstWeek(driver)

    print('- Consume the web.')
    wrapper = driver.find_element_by_class_name('downloads-help-area')

    download_img_els = wrapper.find_elements_by_class_name('downloads-button')

    for el in download_img_els:
        text = el.text.encode('utf-8')
#        print(text)
        if 'download image' == text.strip().lower():
            # Process
            downloadImage(el)
            break

    time.sleep(5)
    closeWebDriver(driver)


def isValidTimeFrame(driver):
    seasons_button = driver.find_element_by_class_name('seasons-button')
    time_frame = seasons_button.text.encode('utf-8').strip().lower()
    current_year = arrow.now().to('local')
    current_year_str = current_year.format('YYYY')
    next_year = current_year.shift(years=1)
    next_year_str = next_year.format('YY')
    print(time_frame)
    compare_year = '%s-%s' % (current_year_str, next_year_str)

    return time_frame == compare_year

def selectFirstWeek(driver):
    prev = driver.find_element_by_id('prevMap')
    week = driver.find_element_by_id('weekSlider')

    while True:
        print(week)
        current_number = week.get_property('value')
        print('- Week: ' + current_number)
        prev.click()
        if int(current_number) < 2:
            break;

    time.sleep(1)


def downloadImage(el):
    print('- Click on ' + el.text)
    el.click()


getImage()

【讨论】:

    猜你喜欢
    • 2022-01-23
    • 1970-01-01
    • 2016-11-10
    • 2017-05-14
    • 2016-12-25
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    相关资源
    最近更新 更多