importjsonfromtypingimportDict,List,Optionalfrombs4importBeautifulSoup,NavigableString,Tagfrom.utilsimportget_responseBASE_HEADERS={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36","Referer":"https://www.melon.com/index.htm",}
[문서]asyncdefsearch_yes24_books(query:str)->List[Dict[str,str]]:"""Yes24 도서 검색을 수행합니다. Args: query: 검색할 도서명/저자/출판사 등의 검색어 Returns: List[Dict[str, str]]: 검색된 도서들의 정보를 담은 딕셔너리 리스트 - uid: 도서 ID - url: 도서 상세 페이지 URL - name: 도서명 - weight: 검색 가중치 """url="https://www.yes24.com/Product/searchapi/bulletsearch/goods"max_page=3book_list=[]forpageinrange(1,max_page+1):params={"query":query,"domain":"ALL","page":page,}res=awaitget_response(url,params=params)json_string=res.textobj=json.loads(json_string)total=obj["iGoodsTotalCount"]# ex: 903forbookinobj["lstSearchKeywordResult"]:book_uid=book["GOODDS_INDEXES"]["GOODS_NO"]book_url=f"https://www.yes24.com/Product/Goods/{book_uid}"book_name=book["GOODDS_INDEXES"]["GOODS_NM"]weight=book["GOODDS_INDEXES"]["WEIGHT"]book_list.append({"uid":book_uid,"url":book_url,"name":book_name,"weight":weight,})iflen(book_list)>=total:breakreturnbook_list
[문서]asyncdefget_yes24_toc(book_url:str)->Optional[str]:"""Yes24 도서의 목차 정보를 가져옵니다. Args: book_url: Yes24 도서 상세 페이지 URL Returns: Optional[str]: 도서의 목차 텍스트 목차 정보가 없는 경우 None을 반환합니다. """res=awaitget_response(book_url)html=res.textsoup=BeautifulSoup(html,"html.parser")el=soup.select_one("#infoset_toc textarea")ifel:toc=""forchild_elinel:ifisinstance(child_el,Tag)andchild_el.name=="br":toc+="\n"elifisinstance(child_el,NavigableString):toc+=child_el.textreturntocreturnNone