[파이썬/크롤링] 스팀홈페이지 크롤링 (4)

seulzzang·2022년 9월 21일
0

파이썬/크롤링

목록 보기
4/4
post-thumbnail

SaveID.py에 대한 정보가 부족한 것 같아서 업로드한다.

신규제품의 App Id 수집

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_listglobal변수로 지정해줬는데 update_id_list함수에 사용해줘야해서 그렇게 선언했다. 만약 더 좋은 방법이 있다면 그 방법으로 코드를 개선할 것!

기존의 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에 저장해주면 갱신은 끝난다.

스팀크롤링의 전체적인 모듈 구조는 다음과 같다.

profile
중요한 것은 꺾이지 않는 마음

0개의 댓글