2017-10-07 7 views
-3

저는 파이썬에 익숙하지 않아 매주 동적 맵을 저장하기 위해 웹 스크래핑 코드에 도움이 필요합니다. 이것은 site입니다. 관심을 가지고 있습니다. 목적은 페이지로 이동하여 시즌을 선택하고 주를 선택하고 로컬 폴더로 이미지를 다운로드하는 것입니다. 이 이미지를 사용하여 SAS를 사용하여 자동화 된 주간 보고서를 작성합니다.탐색 컨트롤러가있는 파이썬으로 웹 스크랩

미리 감사드립니다!

+1

어떤 종류의 도움이 필요합니까? –

+0

코드에 도움이 필요합니다 ... .png 파일을 저장하기 위해 스파이더에서 실행할 수 있습니다. – Arthuro

+0

지금까지 시도한 것은 무엇입니까? 정확히 어디에 문제가 있는지 보여주는 코드 예제를 제공해야합니다. 그것없이 당신은 여기에서 어떤 도움을받을 것 같지 않습니다. –

답변

0
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()