지난번에 이어서~..
데이터 처리하는 방향을 바꿨다.
원래는 시스템요구사항
에 해당하는 운영체제
같은 것들을 key
로 받고, 그에 해당하는 값들을 value
로 받아서 그것들을 dictionary
로 만들려고 했지만.. 그렇게 하면 게임 제목은 어디다 담아줘야하지? 하는 어려움에 봉착함.. 난 아직 개초보코더기때문에 그렇게 복잡하게는 생각 못함.. 아직 빡통임..
그래서 게임타이틀
을 key
로 가지고 시스템요구사항
들을 value
로 갖는 dictionary
를 생성해주기로 했다.
{'게임 타이틀(장르)' : [시스템 요구사항]}
으로 이루어진 dictionary
에 담아줄 것이기 때문에
sysreqlist = {}
sysreqlist
를 선언해준다.
이후 id_list
의 길이 만큼 반복문을 수행하며 제목
, 장르
, 최소사양
을 크롤링 한다.
# for i in range(len(id_list)):
for i in range(10):
appidURL = 'https://store.steampowered.com/app/'+id_list[i]
res = requests.get(appidURL, cookies={
'Steam_Language':'koreana'
})
soup = BeautifulSoup(res.text, 'html.parser')
개발자도구를 확인해보면 data-os
속성이 있는 것을 알 수 있는데, 이는 운영체제를 나타내는 속성이며, 나는 윈도우만 필요하므로 data-os="win"
속성을 지정해 주기로 하였다.
sysreq_content = soup.select_one('.game_area_sys_req.sysreq_content.active[data-os="win"]')
if sysreq_content.select_one('.game_area_sys_req_leftCol') == None:
sysreqs = sysreq_content.select('.game_area_sys_req_full li')
else:
sysreqs = sysreq_content.select('.game_area_sys_req_leftCol li')
appName = soup.select_one('#appHubAppName').text
genre = soup.select('.glance_tags.popular_tags a')[0].text.strip()
title = appName + ' (' + genre + ')'
많기도 하다..
보통 대부분의 게임들은 시스템 요구사항에 최소
와 권장
이 left_col
과 right_col
로 나뉘어져있다. 하지만 최소
만 존재하는 경우 game_area_sys_req_full
클래스를 가지므로 클래스 game_area_sys_req_leftCol
를 호출하면 아무값도 나오지 않음.. 그래서 sysreq_content.select_one('.game_area_sys_req_leftCol') == None
이라면 최소
만 존재하는 경우이므로 클래스를 game_area_sys_req_full
주는 조건문을 달아줬다.
sysreq_content
sysreqs
appName
: 게임 타이틀genre
:이 제품의 인기태그
의 첫번째 항목(게임 장르를 파악하기 위함)title
: 최종dictionary
에 담아줄게임 타이틀
과장르
를 합친str
req_list = []
for sysreq in sysreqs:
# >문장<이 나오면 제외.
if '필요합니다' in sysreq.text:
continue
elif '추가 사항' in sysreq.text:
continue
else:
req = sysreq.text.strip()
req_list.append(req)
sysreqlist[title] = req_list
req_list
를 초기화 한다.시스템 요구 사항
박스에 64비트 프로세서와 운영 체제가 필요합니다
라는 문장이 들어가 있는 경우가 있는데, 이 역시 li
태그에 포함된 text
라서 제외시켜줘야 한다. (필요하다면 담아도 상관 없음) 이를 파악하고 인덱스를 0번부터가 아닌 1번부터 불러오기로 하면 가끔 저런 문장이 없는 경우가 있어서 그냥 필요합니다
라는 text
가 포함돼 있는 경우 continue
를 해주는 방식으로 시스템 요구사항들을 크롤링했다.어두운 곳에서 헤드셋을 끼고 플레이하십시오
같은.. 가끔 이런 소리가 들어가 있는 게임이 있길래 제외시켜줬다.dictionary
에 담아주면 끝.Output exceeds the size limit. Open the full output data in a text editor
{'The Death | Thần Trùng (공포)': ['운영체제: Windows 7 SP1+ x64',
'프로세서: Intel/Amd',
'메모리: 4 GB RAM',
'그래픽: Nvidia/Amd',
'DirectX: 버전 11',
'저장공간: 8 GB 사용 가능 공간',
'사운드카드: Yes'],
'The Wandering Village (앞서 해보기)': ['운영체제: Windows® 7, Windows® 10',
'프로세서: Quad Core Processor',
'메모리: 4 GB RAM',
'그래픽: GeForce GTX 660, Radeon RX 460 or similar dedicated graphics card',
'DirectX: 버전 11',
'저장공간: 2 GB 사용 가능 공간'],
'카이토 마사하루의 사건부 (액션)': ['운영체제: Windows 10',
'프로세서: Intel Core i5-3470, 3.2 GHz or AMD Ryzen 3 1200, 3.1 GHz',
'메모리: 8 GB RAM',
'그래픽: NVIDIA GeForce GTX 960, 2 GB or AMD Radeon RX 460, 2 GB',
'저장공간: 60 GB 사용 가능 공간'],
'로스트 저지먼트: 심판받지 않은 기억 (액션)': ['운영체제: Windows 10',
'프로세서: Intel Core i5-3470, 3.2 GHz or AMD Ryzen 3 1200, 3.1 GHz',
'메모리: 8 GB RAM',
'그래픽: NVIDIA GeForce GTX 960, 2 GB or AMD Radeon RX 460, 2 GB',
'저장공간: 60 GB 사용 가능 공간'],
'저지 아이즈:사신의 유언 Remastered (액션)': ['운영체제: Windows 10',
'프로세서: Intel Core i5-3470, 3.2 GHz or AMD Ryzen 3 1200, 3.1 GHz',
...
'메모리: 256 MB RAM',
'그래픽: Intel graphics HD 620',
'DirectX: 버전 9.0',
'저장공간: 120 MB 사용 가능 공간',
'사운드카드: existent']}
크롤링이 아주 잘 된 것을 확인할 수 있다!
원래 장르는 크롤링 안하려고 했는데.. 게임의 장르가 뭔지는 파악해야지 컴퓨터 사양이 나랑 맞든 말든 플레이를 할 마음이 들지 않겠냐구요.. 그래서 제목 옆에 붙여주기로 했다.
텔레그램 자동화를 실행할 경우 해당 게임이 출시된 날짜와 함께
*월 *일 신작 게임 안내입니다.
< The Death | Thần Trùng (공포) >
해당 게임에 요구되는 최소 사양입니다.
['운영체제: Windows 7 SP1+ x64',
'프로세서: Intel/Amd',
'메모리: 4 GB RAM',
'그래픽: Nvidia/Amd',
'DirectX: 버전 11',
'저장공간: 8 GB 사용 가능 공간',
'사운드카드: Yes']
이런 식으로 메세지를 보내주는 형식이 어떨까..
이제 남은것은 신규데이터를 체크하기위해서 id_list
를 갱신해야 하는데, 이를 파일로 저장해서 관리하고 불러오기를 하는 방법을 코딩해야한다.
스팀 홈페이지가 개빡치는게 app id
가 순서대로인게 아니라 뒤죽박죽이다.. 그래서 일단 생각하기로는 자동화를 시작하기 전 까지 신규 app id
를 텍스트 파일로 관리하고, 매일containment test
를 진행하여 없는 app id
면 신작이니까 그 아이디에 해당하는 게임만 크롤링하는 방식으로..
일단 생각까진 완벽한데.. 할 수 있는 데 까지 코딩을 얼른 해야겠다. 주말엔 놀아야하니까😊