컴퓨터 하드웨어 정보를 잘 받아오기 위해 여러 사이트를 탐색해 봤지만 가격대와 인기순으로 잘 정리되어 있는 사이트는 다나와였다.
다나와페이지를 크롤링하기 위해 다나와 페이지의 구조를 탐색해 봤다.
구조가 위와 같이 되어있는 걸 확인했기에 필요한 정보에 대한 위치를 확인해봐야 했다.
첫 번째로 이미지의 정보가 필요했기에 이미지파일의 위치를 찾아야 했다.
이 위치에 이미지파일이 존재하는 걸 알았기에 구조에 맞춰서 이미지값을 가져오는 코드를 작성했다.
img_link = li.select_one('div.thumb_image > a > img').get('data-original')
if img_link == None:
img_link = li.select_one('div.thumb_image > a > img').get('src')
img_link = img_link.replace("shrink=130:130", "shrink=330:*")
위와 같이 작성해서 img의 값을 받아오고 또한 replace를 이용해 이미지 사이즈를 키웠다.
두 번째로 브랜드와 이름을 가져와야 했기에 또다시 페이지 구성을 확인해 본 후
위 위치에 이름이 존재하는 걸 알았기에 코드를
Brand_tmp = li.select_one('p.prod_name > a').text.strip().split(" ")
Brand = Brand_tmp[0]
name = li.select_one('p.prod_name > a').text.strip()
위와 같이 작성해서 브랜드명과 이름을 가져오게 만들었다.
세 번째로 제품의 스펙을 가져와야 하기 때문에 구조 내의 class이름이 spec_list인 부분이 스펙을 나열해 놓은 곳임을 발견했고
spec_list = li.select_one('div.spec_list').text.strip().split(' / ')
위와 같이 작성하여 각 스펙값들을 List로 받아왔다.
마지막 네 번째로 각 제품별 가격을 가져와야 하는데 여기서 문제가 발생했다.
위 사진처럼 제품가격리스트가 있는데 제품 하나만의 가격이 있는 게 아니라 정품, 멀티팩, 벌크, 해외구매 등으로 나뉘어서 각 가격이 달랐기 때문에 rank_one의 가격만 가져오게 코드를 수정해야 했다.
try:
price = li.select_one('li.rank_one > p.price_sect > a > strong').text.strip().replace(',', "")
except:
price = li.select_one('p.price_sect > a > strong').text.strip().replace(',', "")
위와 같이 수정해서 rank_one이 없을 때는 그냥 제품의 가격을 가져오게 작성했다.
위 코드들은 CPU를 작성한것이지만 SSD나 케이스같은 경우에는 다른값이 추가된다.
예를들어 SSD의 경우 용량을 체크해야하기때문에 코드의 추가가 필요했다.
for size, price_sect in zip(sizes, prices):
size_text = size.get_text(strip=True).replace(',', " ")
if 'TB' in size_text:
size_tmp = 'TB'
size_text = size_text.split('TB')
elif 'GB' in size_text:
size_tmp = 'GB'
size_text = size_text.split('GB')
else:
size_tmp = ''
if size_text and len(size_text) >= 2:
if "원/" in size_text[0]:
size_text = size_text[1]
size_text = re.sub(r'^\d+위', '', size_text)
size_TorG = [size_text, size_tmp]
else:
size_text = size_text[0]
size_text = re.sub(r'^\d+위', '', size_text)
size_TorG = [size_text, size_tmp]
else:
size_text = ''
위처럼 추가해서 용량값이 TB인지 GB인지 판단하고 그 값을 뽑아오게 추가했다.
이처럼 각 하드웨어 부품들의 값들을 .json형태로 뽑아왔다.
GitHub - pojun406/Danawa_Scrapper
Contribute to pojun406/Danawa_Scrapper development by creating an account on GitHub.
github.com
깃허브에 코드를 푸시해 놨다. 한번 들러보면 좋을 것 같다.
'실력 향상 일지 > 23년 캡스톤 디자인' 카테고리의 다른 글
4. Python) json파일 DB에 저장 (0) | 2023.12.09 |
---|---|
3. Python) 데이터 필터링 (0) | 2023.12.09 |
1. 크롤링 준비 (0) | 2023.08.08 |
0. 시작하며 (0) | 2023.07.01 |