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