• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

다른사이트 크롤링 질문드려요

19.11.25 19:49 작성 조회수 228

1

아까 올린 질문은 파싱을 lxml로 해야만 가능하네요.

저는 계속 html.parser로 파싱했더니 [] 가 출력되더라고요. 

*그이유는 무엇일까요?

추가로

 https://www.amorepacificmall.com/kr/ko/product/detail?onlineProdSn=20480&onlineProdCode=110770000064

이 페이지의 리뷰 부분을 크롤링하고 싶은데 크롤링 영역 

class_="ellipsis line5"

넣으면 크롤링이 안되는데 혹시 크롤링하는 방법이 있을까요?

남박사님 도와주세요.

답변 2

·

답변을 작성해보세요.

1

아 그리고 html.parser 와 lxml 은 내부적으로 select 하는 방식이 달라서 때에 따라 사용하는 라이브러리에 맞게 코드를 수정해야하는 경우가 종종 있습니다. 참고하세요

1

위의 이미지를 보시면 알 수 있듯이 말씀하신 페이지의 리뷰 정보는 알려주신 주소 페이지의 내부에서 Ajax 통신을 하여 리뷰데이터를 따로 구해와서 출력하는 방식이라 해당 페이지만을 갖고는 리뷰데이터를 구할 수 없습니다. 

강좌중에 아래의 강좌를 참고하시면 Ajax로 통신하는 사이트를 분석하고 크롤링하는 내용을 참고하실 수 있습니다.

Ajax로 동작하는 직방 데이터 구하기

따라서 위와 같은 페이지에서 리뷰 데이터를 추출하려면 제가 급작스럽게 작성 및 테스트한 아래 코드를 참고하셔서 분석해보시기 바랍니다. 핵심적인 내용을 파악하시라 최대한 간단하게 작성한 코드 입니다. 분석 방법은 위의 강좌 링크를 참고하시구요

import requests


# 리뷰는 상품페이지 내에서 Ajax로 리뷰페이지를 따로 로딩해서 출력
url = "https://www.amorepacificmall.com/kr/ko/product/getReviewList?prodReviewUnit=OnlineProd&prodReviewType=ExcludeExperience&onlineProdSn=20480&prodSn=&styleCode=&prodReviewSort=Recommend&scope=All&topReviewOnlyYn=N&topReviewFirstYn=N&startDate=&endDate=&imageOnlyYn=N&offset=0&limit=10&displayMenuSetId=&displayMenuId=&_=1574687443046"

# 해당 데이터는 Ajax를 통해 json 형태로 리턴됨
# 위의 url 주소를 꼭!! 직접 브라우저에서 접속해보세요. 
# 크롬보다는 파이어폭스 브라우저가 기본적으로 json데이터를 pretty 스타일로 json 데이터를 보여주기 때문에 보기가 좋습니다.
datas = requests.get(url).json()

# 리턴된 json 데이터의 루트 요소는 prodReviewListInfo 이고
# 리뷰는 prodReviewListInfo 밑에 prodReviewList 에 존재함
reviews = datas["prodReviewListInfo"]["prodReviewList"]

# 반복문을 돌면서 원하는 데이터를 추출하면 됩니다.
for r in reviews:
    sn = r["prodReviewSn"]
    text = r["prodReviewBodyText"]
    order_number = r["ordNo"]
    prod_sn = r["prodSn"]
    prod_name = r["prodName"]
    print(prod_name)