11번가 인기검색어 크롤링 - str
11번가 쇼핑몰 json 데이터 가져오기
2008년 11번가 오픈을 하고 2017년쯤 매각하려고 했었죠!!
매각철회(안팔려서?)하고 2018년에 한국의 아마존을 만들겠다고 했으나... 뉴스{:target="_blank")
requests로 페이지 전체를 읽어서,
bs4로 크롤링해도 되지만..
보통 인기검색어 랭킹은 ajax등으로 따로 구현해놓는 경우가 많습니다.
개발자모드(F12)로 Network를 뒤져보니
찾아보니 역시나 랭킹을 제공하는 url이 있습니다.
https://www.11st.co.kr/AutoCompleteAjaxAction.tmall?method=getKeywordRankJson&type=hot&isSSL=Y&rankCnt=20&callback=fetchSearchRanking
fetchSearchRanking({
"count": 20,
"items": [{
"keywordExtendInfo": "0:202:3/17발송! 국내정발",
"rankUlOpen": true,
"keyword": "오큘러스 퀘스트2",
"explanation": "3/17발송! 국내정발",
"currentRank": 1,
"searchCount": "202",
"rankOrder": "0",
"rankUlClose": false,
"pcSearchLink": "https://search.11st.co.kr/Search.tmall?kwd=%25EC%2598%25A4%25ED%2581%2598%25EB%259F%25AC%25EC%258A%25A4%2B%25ED%2580%2598%25EC%258A%25A4%25ED%258A%25B82",
"top3": "top3"
} {
"keywordExtendInfo": "148:12:",
"rankUlOpen": false,
"keyword": "리큅 에어프라이어",
"explanation": "",
"currentRank": 20,
"searchCount": "12",
"rankOrder": "148",
"rankUlClose": true,
"pcSearchLink": "https://search.11st.co.kr/Search.tmall?kwd=%25EB%25A6%25AC%25ED%2581%2585%2B%25EC%2597%2590%25EC%2596%25B4%25ED%2594%2584%25EB%259D%25BC%25EC%259D%25B4%25EC%2596%25B4",
"top3": ""
}],
"updateTime": "2021.03.11 14:10"
})
Return 데이터는 json형태이지만 문자열이고, 20개의 랭킹을 불러오는 기능입니다.
keywordExtendInfo : 제품정보1
rankUlOpen : 상승/하락
keyword : 제품명
explanation : 제품정보
currentRank : 제품정보2
searchCount : 조회된 수
rankOrder : 랭크변화?
rankUlClose : 랭크변화아이콘??
pcSearchLink : 제품 검색 링크
top3 : top rank `위,2위, 3위 여부
requests 패키지 사용 인기검색어 가져오기
import json
import requests
res = requests.get("https://www.11st.co.kr/AutoCompleteAjaxAction.tmall?method=getKeywordRankJson&type=hot&isSSL=Y&rankCnt=20&callback=fetchSearchRanking")
if res.status_code == 200:
print(res.text[:200])
print("current encoding : ",res.encoding)
res.encoding = 'utf-8'
print("current encoding : ", res.encoding)
res_text= res.text[res.text.find("({")+1:res.text.find("})")+1]
data = json.loads(res_text)
for item in data['items']:
print("keywordExtendInfo : ", item['keywordExtendInfo'])
print("rankUlOpen : ", item['rankUlOpen'])
print("keyword : ", item['keyword'])
print("explanation : ", item['explanation'])
print("currentRank : ", item['currentRank'])
print("searchCount : ", item['searchCount'])
print("rankOrder : ", item['rankOrder'])
print("rankUlClose : ", item['rankUlClose'])
print("pcSearchLink : ", item['pcSearchLink'])
print("top3 : ", item['top3'])
quit()
결과:
fetchSearchRanking({"count":20,"items":[{"keywordExtendInfo":"0:198:ìì¼ì , 25%í ì¸ì¿ í°","rankUlOpe...
current encoding : ISO-8859-1
current encoding : utf-8
keywordExtendInfo : 0:198:십일절, 25%할인쿠폰
rankUlOpen : True
keyword : 드시모네
explanation : 십일절, 25%할인쿠폰
currentRank : 1
searchCount : 198
rankOrder : 0
rankUlClose : False
pcSearchLink : https://search.11st.co.kr/Search.tmall?kwd=%25EB%2593%259C%25EC%258B%259C%25EB%25AA%25A8%25EB%2584%25A4
top3 : top3
가져온 데이터가 한글이 다 깨져서 encoding 으로 확인하니 ISO-8859-1 였습니다.
utf8변환하니 한글이 잘 나왔습니다.
json.loads를 이용하기 위해서 문자열을
json형태로 잘라서 이용했습니다.
위메프나 ak몰이랑 다르게 11번가는 손이 많이 갑니다.
요청 파라메터
파라메터에 rankCnt=100 으로 넣으면 랭킹 100개 나오네요..ㅎㅎ