-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
다른사이트 크롤링 질문드려요
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"
넣으면 크롤링이 안되는데 혹시 크롤링하는 방법이 있을까요?
남박사님 도와주세요.
답변을 작성해보세요.
1
남박사
지식공유자2019.11.25
아 그리고 html.parser 와 lxml 은 내부적으로 select 하는 방식이 달라서 때에 따라 사용하는 라이브러리에 맞게 코드를 수정해야하는 경우가 종종 있습니다. 참고하세요
1
남박사
지식공유자2019.11.25
위의 이미지를 보시면 알 수 있듯이 말씀하신 페이지의 리뷰 정보는 알려주신 주소 페이지의 내부에서 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)
답변 2