[Web Crawling] 인피니티 스크롤 크롤링
인피니티 스크롤 크롤링
- 스크롤을 내리면, api를 요청한 후 새로운 정보를 계속해서 보여주는 웹 사이트 형태
예시 사이트
- 메인 페이지에서 아래로 드래그하면, 요청을 보내서 데이터를 렌더링 해주는 비동기 사이트이다.
- 이런 방식으로 나와있고 드래그를 하면서 어떤 응답 요청을 받는지 확인한다.
요청 URL:
https://jungle.co.kr/recent.json?magazineOffset=0&contestOffset=0&exhibitOffset=0&galleryOffset=0
https://jungle.co.kr/recent.json?magazineOffset=1&contestOffset=5&exhibitOffset=0&galleryOffset=0
https://jungle.co.kr/recent.json?magazineOffset=4&contestOffset=8&exhibitOffset=0&galleryOffset=0
https://jungle.co.kr/recent.json?magazineOffset=8&contestOffset=10&exhibitOffset=0&galleryOffset=0
- 드래그를 할 때 마다, resent.json? 이후 파라미터 값을 입력해서 데이터를 불러오는 방식이다.
- 규칙을 찾기 어려워서, 미리보기를 통해 정보를 더 살펴보면 다음으로 올 파라미터 값들을 가지고 있다.
- 이를 활용해서 크롤링하기.
크롤링
import requests
from bs4 import BeautifulSoup as bs
url = "https://jungle.co.kr/recent.json?magazineOffset=0&contestOffset=0&exhibitOffset=0&galleryOffset=0"
response = requests.get(url)
response.text
'{"exhibitOffset":0,"existMore":true,"contestOffset":5,"success":true,"galleryOffset":0,"moreList":[{"id":208212,"title":"탄소중립 서울 캠퍼스 대전 참가 초대","thumbnailImageId":"78c2a204490e9f10b55eb696","secondaryThumbnailImageId":"bb35575e4fb3bd8c281fa61f","confirmedDate":"24-11-15","originalCreatedDate":1731646217000,"targetCode":"공모전","targetName":"contest"},{"id":208211,"title":"[추천공모전] 아나운서 포트폴리오 제작 심화 과정 (~12.19)","thumbnailImageId":"867d59d44b9db2e601c38414","secondaryThumbnailImageId":"ad6034d34767a239d84336cf","confirmedDate":"24-11-15","originalCreatedDate":1731631600000,"targetCode":"공모전","targetName":"contest"},{"id":208210,"title":"2025 에몬스 장학생 [17기]모집","thumbnailImageId":"785f4fa8405ab34762e2abc8","secondaryThumbnailImageId":"78dfcd7f4614b0f2ca5ddc46","confirmedDate":"24-11-14","originalCreatedDate":1731578646000,"targetCode":"공모전","targetName":"contest"},{"id":206527,"title":"[포커스 인터뷰] \\"책으로 인생을 설계하라\\"_ 독서코칭 전문가 김을호 회장이 전하는 독서의 지혜와 방법\xa0","thumbnailImageId":"1c7224924f0d91eff072a574","confirmedDate":"24-11-14","originalCreatedDate":1731578446000,"targetCode":"매거진","targetName":"magazine"},{"id":208209,"title":"It_청년취업 네트워킹 파티(with. 성동청도지)","thumbnailImageId":"9fbf7e19463f8e2a3fa1df92","secondaryThumbnailImageId":"b60951ad459b89142cee2f0f","confirmedDate":"24-11-14","originalCreatedDate":1731578366000,"targetCode":"공모전","targetName":"contest"},{"id":208208,"title":"It\'s 여행(with. 성동청도지)","thumbnailImageId":"ce86dd204c15bd4ce9a07570","secondaryThumbnailImageId":"1077ea604a399d4b8041029d","confirmedDate":"24-11-14","originalCreatedDate":1731578071000,"targetCode":"공모전","targetName":"contest"}],"magazineOffset":1}'
- 잘 오는 것을 확인할 수 있다.
- 미리보기에서 봤던 파라미터들에서 moerList에 데이터가 들어있는 것을 확인할 수 있다.
- 다음 파라미터도 같이 전달되는데, 이를 루프를 돌면서 변수를 업데이트하고 크롤링하며 된다.
"https://jungle.co.kr/recent.json?magazineOffset=0&contestOffset=0&exhibitOffset=0&galleryOffset=0"
datas = []
magazineOffset = 0
contestOffset = 0
exhibitOffset = 0
galleryOffset = 0
url = f"https://jungle.co.kr/recent.json?magazineOffset={magazineOffset}&contestOffset={contestOffset}&exhibitOffset={exhibitOffset}&galleryOffset={0}"
- 기존 URL에서 어떤 변수가 들어가는지 확인한다.
- = 이후에 들어가는 파라미터를 통해서 변수를 할당할 수 있게 변경한다.
url = f"https://jungle.co.kr/recent.json?magazineOffset={magazineOffset}&contestOffset={contestOffset}&exhibitOffset={exhibitOffset}&galleryOffset={0}"
response = requests.get(url)
response.json()
------------------
{'exhibitOffset': 0,
'existMore': True,
'contestOffset': 5,
'success': True,
'galleryOffset': 0,
'moreList': [{'id': 208212,
'title': '탄소중립 서울 캠퍼스 대전 참가 초대',
'thumbnailImageId': '78c2a204490e9f10b55eb696',
'secondaryThumbnailImageId': 'bb35575e4fb3bd8c281fa61f',
'confirmedDate': '24-11-15',
'originalCreatedDate': 1731646217000,
'targetCode': '공모전',
'targetName': 'contest'},
{'id': 208211,
'title': '[추천공모전] 아나운서 포트폴리오 제작 심화 과정 (~12.19)',
'thumbnailImageId': '867d59d44b9db2e601c38414',
'secondaryThumbnailImageId': 'ad6034d34767a239d84336cf',
'confirmedDate': '24-11-15',
'originalCreatedDate': 1731631600000,
'targetCode': '공모전',
'targetName': 'contest'},
{'id': 208210,
'title': '2025 에몬스 장학생 [17기]모집',
'thumbnailImageId': '785f4fa8405ab34762e2abc8',
'secondaryThumbnailImageId': '78dfcd7f4614b0f2ca5ddc46',
'confirmedDate': '24-11-14',
'originalCreatedDate': 1731578646000,
'targetCode': '공모전',
'targetName': 'contest'},
{'id': 206527,
'title': '[포커스 인터뷰] "책으로 인생을 설계하라"_ 독서코칭 전문가 김을호 회장이 전하는 독서의 지혜와 방법\xa0',
'thumbnailImageId': '1c7224924f0d91eff072a574',
'confirmedDate': '24-11-14',
'originalCreatedDate': 1731578446000,
'targetCode': '매거진',
'targetName': 'magazine'},
{'id': 208209,
'title': 'It_청년취업 네트워킹 파티(with. 성동청도지)',
'thumbnailImageId': '9fbf7e19463f8e2a3fa1df92',
'secondaryThumbnailImageId': 'b60951ad459b89142cee2f0f',
'confirmedDate': '24-11-14',
'originalCreatedDate': 1731578366000,
'targetCode': '공모전',
'targetName': 'contest'},
{'id': 208208,
'title': "It's 여행(with. 성동청도지)",
'thumbnailImageId': 'ce86dd204c15bd4ce9a07570',
'secondaryThumbnailImageId': '1077ea604a399d4b8041029d',
'confirmedDate': '24-11-14',
'originalCreatedDate': 1731578071000,
'targetCode': '공모전',
'targetName': 'contest'}],
'magazineOffset': 1}
- 요청을 보내면 잘 오는 것을 확인할 수 있다.
- for문을 통해서 데이터를 넣고, 파라미터를 업데이트 시키면서 반복하면 된다.
'Data Analysis > Data Mining' 카테고리의 다른 글
[Web Crawling] snake - camel case (0) | 2024.11.23 |
---|---|
[Web Crawling] 정리 (0) | 2024.11.17 |
[Web Crawling] 비동기 사이트 (0) | 2024.11.16 |
[Web Crawling] CSS 셀렉터 (0) | 2024.11.16 |
[Web Crawling] BeautifulSoup (0) | 2024.11.14 |
[Web Crawling] Requests (0) | 2024.11.14 |
[Web Crawling] HTML 구조 (0) | 2024.11.14 |
댓글