SaveID.py
에 대한 정보가 부족한 것 같아서 업로드한다.
import requests
from bs4 import BeautifulSoup
def collect_new_ids(id_list : str):
'''
스팀의 신규 제품 App Id를 수집하는 함수입니다.
id_list = 'id_list의 파일 경로'
ex) './id_list.txt'
'''
new_crawling_id = []
URL = 'https://store.steampowered.com/search/results/?query&start=0&count=50&sort_by=Released_DESC&snr=1_7_7_popularnew_7&filter=popularnew&os=win&infinite=1'
res = requests.get(URL, cookies={
'Steam_Language':'koreana'
})
json_data = res.json()
soup = BeautifulSoup(json_data['results_html'], 'html.parser')
appids = soup.select('a')[:10]
for appid in appids:
idtag = appid.attrs['data-ds-appid']
new_crawling_id.append(idtag)
with open(id_list, 'r', encoding='utf-8') as f:
id_list = f.readlines()
global origin_id_list
origin_id_list = []
for id in id_list:
temp = id.rstrip()
origin_id_list.append(temp)
new_id = []
for id in new_crawling_id:
if id not in origin_id_list:
new_id.append(id)
return new_id
collect_new_ids
에서 appids
는 페이지 전체가 아닌 10개까지만 긁어오도록 했다. (사실 하루에 신작이 많아봤자 두세개 나오는데, 혹시나 하는 상황을 방지하기 위해. 크롤링 데이터가 많은 것도 아니기 때문에 범위를 크게 잡았다.) 이후에 이를 new_crawling_id
리스트에 담는다. 기존에 저장된 id_list
파일을 불러와서 이를 origin_id_list
에 저장한 뒤 containment test
를 진행해주면 신작들의 app id
를 받아볼 수 있다.
origin_id_list
를 global
변수로 지정해줬는데 update_id_list
함수에 사용해줘야해서 그렇게 선언했다. 만약 더 좋은 방법이 있다면 그 방법으로 코드를 개선할 것!
def update_id_list(new_id, update_id_list : str):
'''
기존의 ID List를 갱신합니다.
new_id = 갱신된 app id값을 저장할 리스트
update_id_list = 'id_list의 파일 경로'
'''
for id in origin_id_list:
new_id.append(id)
with open(update_id_list, 'w') as f:
for id in new_id:
f.write(id + '\n')
return True
이후 이를 다시 id_list
에 저장해주면 갱신은 끝난다.
스팀크롤링의 전체적인 모듈 구조는 다음과 같다.