Python 기반 소 후 증권 주식 취득 과정 분석

데이터 추출
우리 가 상기 증 50 의 주식 을 예 로 들 면 먼저 이 50 개의 주식 을 포함 하 는 사이트 의 주식 코드 를 찾 아야 한다.예 를 들 어 여기 서 우 리 는 소 후 증권 이 제공 하 는 목록 을 사용 해 야 한다.
https://q.stock.sohu.com/cn/bk_4272.shtml

이 사이트 에서 상기 50 의 모든 주식 코드 가 있 는 것 을 볼 수 있 습 니 다.우리 가 원 하 는 것 은 바로 이 주식 코드 를 포함 한 표 이 고 이 표 의 첫 번 째 열 을 얻 는 것 입 니 다.
사이트 의 데 이 터 를 얻 기 위해 우 리 는 Beautiful Soup 이라는 도 구 를 사용 합 니 다.주의해 야 할 것 은 보통 정적 웹 페이지 의 정보 만 얻 을 수 있 습 니 다.
쉽게 말 하면 Beautiful Soup 은 Python 의 라 이브 러 리 로 가장 중요 한 기능 은 웹 페이지 에서 데 이 터 를 캡 처 하 는 것 이다.
여느 때 처럼 이 라 이브 러 리 를 사용 하기 전에 이 라 이브 러 리 bs4 를 가 져 와 야 합 니 다.그 밖 에 저 희 는 requests 라 는 도 구 를 사용 하여 사이트 정 보 를 얻어 야 하기 때문에 이 두 개의 라 이브 러 리 를 가 져 옵 니 다.
import bs4 as bs
import requests
우 리 는 상기 50 주식 코드 의 획득 을 실현 하기 위해 함수 savesS50Tickers()를 정의 합 니 다.얻 은 데 이 터 는 소 후 증권 의 웹 페이지 에서 나 오고 get()방법 으로 주어진 정적 웹 페이지 의 데 이 터 를 얻 습 니 다.
def saveSS50Tickers():
resp = requests.get('https://q.stock.sohu.com/cn/bk_4272.shtml')
그 다음 에 우 리 는 소 후 증권 의 이 사 이 트 를 열 고 페이지 의 임 의 위치 에서 오른쪽 단 추 를 누 르 면 요 소 를 보 거나 Inspect Element 또는 유사 한 옵션 을 선택 하여 현재 사이트 의 소스 코드 정 보 를 볼 수 있 습 니 다.

우 리 는 먼저 여기에서 웹 페이지 의 기본 정보 와 우리 가 기어 올 라 가 야 할 데이터 의 특징 을 찾 아야 한다.

우선 Element 를 찾 아 다음 내용 에서 웹 페이지 의 헤더 파일(head)을 찾 습 니 다.그리고 웹 페이지 의 문자 인 코딩 방식 을 찾 습 니 다.여기 이 페이지 문자 의 인 코딩 방식 은 gb 2312 입 니 다.
만약 우리 가 이 웹 페이지 를 올 라 가서 정확하게 표시 하려 면 먼저 얻 은 웹 페이지 의 내용 을 디 코딩 해 야 한다.
디 코딩 은 encoding 이라는 방법 을 사용 할 수 있 습 니 다.
resp.encoding = 'gb2312'
다음은 BeautifulSoup 과 lxml 를 사용 하여 웹 페이지 정 보 를 분석 합 니 다.
soup = bs.BeautifulSoup(resp.text, 'lxml')
여 기 는 후기의 처 리 를 편리 하 게 하기 위해 먼저 resp.text 를 사용 하여 웹 페이지 정 보 를 텍스트 형식 으로 바 꾼 다음 에 웹 페이지 의 데 이 터 를 분석 합 니 다.
그 다음 에 우 리 는 웹 페이지 의 소스 코드 에서 정 보 를 찾 아야 하 는 라벨 을 찾 아야 한다.여기 서 우 리 는 이 표 의 정 보 를 찾 아야 한다.먼저,사이트 소스 코드 의 검색 기능 을 통 해 표 안의 관련 데 이 터 를 검색 하여 표 의 소스 코드 를 찾 을 수 있다.

마찬가지 로 이 페이지 를 예 로 들 면 일반 웹 페이지 는 HTML 언어 로 컴 파일 된 것 이다.정확 한 포 지 셔 닝 을 하려 면 HTML 언어의 기본 내용 을 알 아야 하기 때문이다.이 페이지 의 원본 코드 에서

표 가 끝 났 음 을 표시 합 니 다.
우선,우 리 는 soup.find 를 사용 하여 웹 페이지 정보 에서 이 표 라벨 의 입 구 를 찾 습 니 다.
table = soup.find('table', {'id': 'BIZ_MS_plstock'})
그 중에서'table'은 표 하 나 를 찾 아야 한 다 는 뜻 입 니 다.{'id':'BIZMS_plstock'}은 내용 이나 속성 을 통 해 표 의 진일보 한 포 지 셔 닝 을 실현 합 니 다.
표 의 위 치 를 찾 은 후에 우 리 는 필요 한 데 이 터 를 계속 찾 아야 합 니 다.마찬가지 로 이 페이지 를 예 로 들 면:

웹 개발 언어 에서
는 이 열 이 끝 났 음 을 표시 합 니 다.대응 하 는는 이 줄 이 끝 났 음 을 표시 합 니 다.
이 페이지 의 원본 코드 를 통 해 우 리 는 발견 할 수 있다.
표 의 첫 줄 과 두 번 째 줄 은 모두 표두 의 정보 이 고 세 번 째 줄 은 50 개 회사 의 주식 정보 이다.또한 각 회사 의 주식 코드 는 표 의 첫 번 째 열 에 있다.
Python 에 서 는 표 의 세 번 째 줄 부터 캡 처 해 야 하기 때 문 입 니 다.줄 마다 표 의 첫 번 째 열 에 있 는 데 이 터 를 캡 처 하여 캡 처 한 데 이 터 를 텍스트 형식 으로 변환 합 니 다.캡 처 한 데 이 터 를 목록 tickers 로 저장 합 니 다.
tickers = []
for row in table.findAll('tr')[2:]:
ticker = row.findAll('td')[0].text
tickers.append(ticker + '.SS')
따라서 후속 적 인 데이터 처 리 를 편리 하 게 하기 위해 여기 서 우 리 는 상기 50 개 회사 의 주식 코드 를 저장 할 때 코드 뒤에'SS'문 자 를 추가 합 니 다.현재 코드 를 실행 하고 목록 tickers 를 출력 합 니 다.

#    beautiful soup4  ,        
import bs4 as bs
#    pickle        
import pickle
#    request           
import requests

def saveSS50Tickers():
  resp = requests.get('https://q.stock.sohu.com/cn/bk_4272.shtml')
  resp.encoding = 'gb2312'
  soup = bs.BeautifulSoup(resp.text, 'lxml')
  # print(soup)
  
  table = soup.find('table', {'id': 'BIZ_MS_plstock'})
  # print(table)
  tickers = []
  # print(table.find_all('tr'))
  for row in table.findAll('tr')[2:]:
    # print(row)
    ticker = row.findAll('td')[0].text
    tickers.append(ticker + '.SS') 
  return tickers

tickers = saveSS50Tickers()
print(tickers)
출력 정 보 를 다음 과 같이 관찰 합 니 다.
['600036.SS', '601229.SS', '600031.SS', '601166.SS', '600104.SS', '600030.SS', '603259.SS', '601668.SS', '601628.SS', '601766.SS', '601857.SS', '601398.SS', '601390.SS', '600029.SS', '600028.SS', '601818.SS', '601211.SS', '601066.SS', '601111.SS', '600837.SS', '600887.SS', '601888.SS', '600690.SS', '600519.SS', '600016.SS', '601989.SS', '601988.SS', '601601.SS', '600019.SS', '601186.SS', '600703.SS', '600196.SS', '601318.SS', '601800.SS', '600050.SS', '601319.SS', '601288.SS', '601688.SS', '603993.SS', '600309.SS', '600048.SS', '600276.SS', '601138.SS', '601336.SS', '601088.SS', '600585.SS', '600000.SS', '601328.SS', '601939.SS', '600340.SS']
이렇게 해서 우 리 는 소 후 증권 이라는 사이트 에서 상기 50 개의 회사 주식 코드 를 찾 아 문자열 형식 으로 목록 변수 에 저장 했다.
주식 코드 를 로 컬 에 저장 합 니 다.
일반적으로 주식 코드 와 같은 내용 은 짧 은 시간 안에 큰 변동 이 없 기 때문에 우 리 는 사용 할 때마다 다시 오 를 필요 가 없다.편리 한 방법 은 주식 코드 정 보 를 파일 형식 으로 현지 에 저장 하고 사용 할 때 현지에서 직접 읽 으 면 된다 는 것 이다.
여기 서 우 리 는 주식 코드 데 이 터 를 pickle 형식 으로 저장 합 니 다.pickle 형식의 데 이 터 는 Python 에서 효율적으로 액세스 할 수 있 습 니 다.물론 파일 을 이 형식 으로 내 보 내기 전에 해당 하 는 pickle 라 이브 러 리 를 가 져 와 야 합 니 다.
import pickle
pickle 은 모든 데이터 형식의 데 이 터 를 저장 할 수 있 으 며,자주 액세스 하 는 장면(저장 및 복구 상태)에서 읽 는 것 이 더욱 효율 적 입 니 다.
파일 을 pickle 형식 으로 내 보 내 는 방법 은 pickle.dump 이 며,파일 읽 기와 쓰기 동작 을 결합 해 야 합 니 다.
with open('SS50tickers.pickle', 'wb') as f: pickle.dump(tickers, f)
이 곳 의'SS50tickers.pickle'은 저 장 된 파일 의 이름 이 며,'wb'는 파일 에 데 이 터 를 기록 하 는 것 을 표시 합 니 다.pickle.dump(tickers,f)는 목록 tickers 를 파일 에 기록 하 는 것 을 표시 합 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기