업무나 데이터 모아 전처리를 위해
파이썬으로 크롤링하시는 분들 많으실텐데요.
다 아시겠지만 그동안 공부한 걸 정리할겸 적어봅니다.
1. html 크롤링
requests 으로 페이지 정보 요청하고 뷰슙으로 HTML 구문분석하는 간단한 방법입니다.
import requests from bs4 import BeautifulSoup
targetUrl = "타켓주소......" source_code = requests.get(targetUrl, allow_redirects=False) soup = Be autifulSoup(source_code.content, 'html.parser', from_encoding='utf-8') list_data = soup.find_all('li') for item in list_data: print("item") ...... .....
2. xhr 로그 기록으로 크롤링하기
requests 으로 페이지 정보 요청했는데 원하는 데이터가 없을때
Ajax 통해서 데이터를 주고 받는 경우라면 사용 가능한 방법입니다.
크롬 기준으로 F12(개발자모드) - 네트워크탭을 클릭 - XHR를 필터링하여 확인합니다
.
원하는데이터가 통신하는 부분을 찾아 response 부분을 확인하여 데이터를 확인합니다.
json 일수도 있고 html 일 수도 있습니다.
headers 를 클릭하여 post로 요청한는지 get으로 요청하는지 확인하여
post이면 해더정보를 보고 채워서 해더와 파라미터를 채워 보내줍니다.
headers ={ "Referer": "http://블라블라블라", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36" } params = { "goodsCode": "1010101010", "pageNo": "2", "totalPage": "330" } res = requests.post("http://.....요청주소", headers=headers, data=params) soup = BeautifulSoup(res.text, "html.parser")
get이면 headers 클릭후 Request URL에서 요청 주소만 찾아서 보내면 됩니다. 데이터를 가져오니까
그대로 데이터를 뷰슙이나 json형태로 처리하면 됩니다.
3. <script> </script> 안에 자바스크립트로 데이터가 들어 있을때
Ajax로 통신도 안하고 html 안에도 원하는 데이터가 안보이면 자바스크립트 부분을 확인합니다.
<script> 부분을 정규표현식으로 뽑아와 처리합니다.
그대로 데이터를 뷰슙이나 json형태로 처리하면 됩니다.
4. 셀레니움으로 크롤링 하기
위에 방식으로 처리가 안되는 홈페이지거나. 물리적인 버튼을 클릭해야 하거나 한다면 마지막으로
셀레니움을 이용하여 데이터를 뽑아옵니다.
보통 HTML을 뷰슙으로 긁어봣더니 데이터가 없으면 바로 셀레니움으로 하시는분들이 많이 있더라구요.
확실한 방법이긴 하지만.. 리소스도 많이 먹고 느리기도 하고 나머지 방법을 활용 해보심이 좋을거 같습니다.
즐거운 파이썬하세요 : )
나무위키 자동완성이 그렇게 하는편이던데 이건 또 js파일이 난독화 되어있고 배배 꼬아놔서 그냥 시간 낭비인거같아 포기했습니다 -_-
로봇 방지 체크는 너무 많이 시도 안하면 안뜨니까요
도움 많이 되었습니다 감사합니다
열심히 공부해서 쫓아오겠습니다~ 우선 스크랩합니다. 감사합니다~
좋은 내용 감사합니다.