updated_at: 2024-12-15 03:14

Investing.com 상장사명 가져오기

investing 에서 데이타를 가져오기 위해 상장사 코드가 필요하다. 우리나라의 상장사 코드를 이용하여 investing.com에서 사용하는 상장사 코드를 가져오는 예제입니다.

방법 1 : investpy 사용

import investpy

class Investing():
  def __init__(self, parent=None):
    super().__init__()

  def updateInvestingCompName(self):
    code = '005930' # 삼성전자

    try:
      search_results = investpy.search_quotes(text=code, products=['stocks'],
                                                countries=['south korea'], n_results=5)
      print(search_results)
      for search_result in search_results:
        en_name = search_result.tag.replace('/equities/', "")
        if en_name:
          print(en_name)
        else:
          print('상장사명을 찾을 수 없습니다.')
    except ValueError as e:
      print('I got a ValueError - reason "%s"' % str(e))
      # ConnectionError: ERR#0015: error 403, try again later.
    finally:
      pass

if __name__ == "__main__":
    investing = Investing()
    investing.updateInvestingCompName()

이코드는 403 에러를 발생한다. investing.com에서 크롤링 IP에 대해서는 막아 둔 듯 하다.

방법 2 : BeautifulSoup 및 proxy.scrapeops.io 를 이용한 방법

방화벽으로 인해 proxy를 제공해주는 scrapeops 를 사용하겠습니다.

import requests
from urllib.parse import urlencode
from bs4 import BeautifulSoup

class Investing():
    def __init__(self):
        super().__init__()

    @property
    def headers(self):
        return {
          "User-Agent": "Mozilla/5.0 (Windows; Windows NT 6.1; rv:2.0b2) Gecko/20100720 Firefox/4.0b2",
          "X-Requested-With": "XMLHttpRequest",
          "Accept": "text/html",
          "Accept-Encoding": "gzip, deflate",
          "Connection": "keep-alive",
        }
    def get_scrapeops_url(self, url):
        API_KEY = ''
        payload = {'api_key': API_KEY, 'url': url}
        proxy_url = 'https://proxy.scrapeops.io/v1/?' + urlencode(payload)
        return proxy_url

    def updateInvestingCompName(self):
        code = '005930' # 삼성전자
        url = 'https://kr.investing.com/search/?q=' + code
        page = requests.get(self.get_scrapeops_url(url), headers=self.headers)
        soup = BeautifulSoup(page.text, 'html.parser')
        links = soup.select('.js-inner-all-results-quote-item')

        # print(links)
        for link in links:
          flag = link.select('.flag > i.South_Korea')
          if (len(flag) > 0):

            inv_code = link.get('href').replace("/equities/", "")
            print(inv_code)

if __name__ == "__main__":
    investing = Investing()
    investing.updateInvestingCompName()

결과

samsung-electronics-co-ltd
평점을 남겨주세요
평점 : 2.5
총 투표수 : 1

질문 및 답글