본문 바로가기

Projects/Renewable Energy

[파이썬] RE100 선언한 기업 리스트 가져오기

요즘 친환경, RE100이 대세다.

RE100을 선언하는 기업이 하나 둘씩 늘어나고 있다.

 

RE100 은 Renewable Energy 100%의 약자로, 그 기업이  사업활동을 수행하는 데 사용하는 모든 에너지를 재생에너지로 사용하겠다는 약속이다.

 

'21.6월 기준으로 전 세계 약 300여개 기업들이 RE100과 관련된 자발적 공약을 선언하였다.

 

예를 들어 '2025년까지 70%, 2026까지 100% 달성할거다' 식이다.

 

 

 

무엇을 왜 만들었는가?

 

RE100 선언한 기업의 현황을 체계적으로 파악하고 싶었다.

오늘 기준으로 몇개의 기업이 RE100을 선언했으면,

3개월 뒤 시점 기준으로는 기업이 몇 개 추가되었는지 궁금하다.

 

그럴러면 특정 시점 기준으로 RE100 기업 리스트를 정리하고, 저장해 두어야  한다.

 

하지만 사이트에서는 별도로 목록 다운로드 기능을 제공하고 있지 않다.

그냥 정리한다고 하면, 수동을 하나씩 리스트를 가져오고 정리할 수 밖에 없다.

 

그런데 귀찮다.

 

그리고 비효율적이다.

 

그래서 특정 시점 기준으로 리스트를 자동으로 생성해주는 크롤링+전처리 스크립트를 만들어 보았다.

 

 

코드

import pandas as pd
import requests

try:
    url = 'https://www.there100.org/views/ajax?_wrapper_format=drupal_ajax'
    headers = {
'User=Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36',
'Content-type':'application/x-www-form-urlencoded; charset=UTF-8',
'Accept':'application/json, text/javascript, */*; q=0.01',
'Origin':'https://www.there100.org',
'Referer':'https://www.there100.org/re100-members'}
    dfs = []
    for page in range(0,100):
        data = f'view_name=members&view_display_id=block&view_args=&view_path=%2Fnode%2F149&view_base_path=&view_dom_id=8b3713037a4a73a1f9a879e8e9111c1563aabaf492a051edafedc4d8b646835b&pager_element=0&page={page}&_drupal_ajax=1&ajax_page_state%5Btheme%5D=re100&ajax_page_state%5Btheme_token%5D=&ajax_page_state%5Blibraries%5D=climate_group%2Fcta-button%2Cclimate_group%2Fcta-text%2Cclimate_group%2Ffooter%2Cclimate_group%2Fglobal-styles%2Cclimate_group%2Fheader%2Cclimate_group%2Fhero-pages%2Cclimate_group%2Fmembers-js%2Cclimate_group%2Fnews%2Ccore%2Fpicturefill%2Ceu_cookie_compliance%2Feu_cookie_compliance_default%2Cparagraphs%2Fdrupal.paragraphs.unpublished%2Cre100%2Fglobal-styles%2Csystem%2Fbase%2Cviews%2Fviews.ajax%2Cviews%2Fviews.module'
        response = requests.post(url=url, headers=headers, data=data,allow_redirects=True).json()
        myhtml = response[2]["data"]
        df2 = pd.read_html(myhtml)[0]

        # get only even number of rows
        df2 = df2.iloc[::2,:]

        # website 뒤에 이상한거 없애기
        df2['Website'] = df2['Website'].str.replace(r'\.a.{*', '', regex=True)

        # commitment에서 ~%로 되어있는거 뽑기
        p1 = r'(\d+(\.\d+)?%)'
        p2 = r'(\d+(\.\d+)?%).*?(\d+(\.\d+)?%)'
        y1 = r'(\d{4})'
        y2 = r'(\d{4}).*?(\d{4})'
        df2['percentage_1']= df2['Commitment'].str.extract(p1)[0]
        df2['target_year_1']= df2['Commitment'].str.extract(y1)[0]

        df2['percentage_2']= df2['Commitment'].str.extract(p2)[2]
        df2['target_year_2']= df2['Commitment'].str.extract(y2)[1]

        dfs.append(df2)
    mydf = pd.concat(dfs, ignore_index=True)
except:
    mydf = pd.concat(dfs, ignore_index=True)

Comments

  • 정규표현식(Regular Expression)은 Pandas와 함께 활용하면 정말 강력하다. 퍼센트만 뽑아내거나, 연도 (4자리 숫자)만 뽑아내거나 하는 작업은 정규표현식으로 간단하게 수행할 수 있다.

 

결과물

To be updated...?

  • 시점이 다른 2개의 dataframe이 있을 때, 어떤 항목이 어떻게 달라졌는지, 어떤 기업이 추가되었는지 알려주는 함수를 만들면 좋겠다. 오늘 코드를 작성하였기 때문에 몇개월 뒤에 코드를 실행해서 2개의 dataframe을 확보한 후 작업을 해봐야겠다.
  • 상호를 이용해 1) 기업의 소재국가와 2) 분야(산업)을 확인할 수 있는 API나 사이트가 있는지 찾아봐야겠다. 있으면 국가별로, 산업별로 RE100의 진행 현황을 분류할 수 있다.