[TIL] 스크랩핑 with Pandas
by Holly Yoon1. request를 사용해야 하는 경우
- 기존의 pd.read_html(url)은 url 을 통해 requests 로 요청을 보내서 html 소스코드를 받아옴 > html 소스코드에서 table 태그가 있는지 찾음 > table 태그가 있다면 데이터프레임으로 변환해서 리스트 형태로 반환하는 형태로 동작한다.
- 그러나, pd.read_html 로는 수집이 안 될 때, requests 도구를 사용해서 > HTTP 요청을 보내서 응답을 받아와야 한다.
- requests 는 작은 브라우저 이기 때문에 html 문서를 반환한다. API를 호출한다면 JSON, XML 등의 문서를 받을 수도 있다.
2. 셀레니움을 사용해야하는 경우
- 로그인이 필요할 때, URL 만으로는 수집이 불가할 때, 웹에서 HTML이 아니라 AJAX 형식으로 데이터를 주고 받아, 홈페이지 로딩을 기다릴 필요가 있을 때
- 그러나, 셀레니움을 추천하지 않는 이유 : 셀레니움은 원래 브라우저를 테스트하기 위한 목적으로 만들어졌다. 무겁고 리소스를 많이 사용한다.
- requests 를 사용할 수 있다면 requests 를 사용하는 것이 더 효율적입니다.
3. BeautifulSoup
- html/xml 파서 역할
- 데이터 수집한 내용을 가공하는 일을 도움
https://www.crummy.com/software/BeautifulSoup/bs4/doc/
4. 마인드셋
- 수집할 수 없는 사이트일 때 어떻게 대응해야할까?
- 사이트마다 다 다르다.
- 헤더, 리퍼러, 파라미터 설정, 로그인 등 서버에서 막을 수 있는 한 막아놓은 사이트는 왜 막혔는지!? 리버스엔지니어링을 해서 찾아야 합니다.
5. 실습
- 0101 : 데이터 수집을 위한 판다스 기초를 배웠습니다.
- 0102 : 추상화된 라이브리러인 FinanceDataReader 를 통해서 KRX 에 상장된 종목 정보를 수집했습니다.
- 0103 : 네이버 금융의 뉴스기사를 수집했습니다. 브라우저의 네트워크 탭을 통해 데이터를 주고 받는 URL 을 확인하는 방법을 배웠습니다. f-string 으로 URL을 만들어 주었습니다. pd.read_html() 만으로도 데이터 수집이 가능했습니다. for 문을 사용해서 여러 페이지를 수집해 봤습니다.
- 0104 : 네이버 금융의 특정 종목의 일별시세를 수집했습니다. 사이트에서 user-agent 가 브라우저가 아니면 응답을 주지 않습니다. requests의 get을 사용해서 headers를 지정해서 데이터를 수집해 왔습니다. BeautifulSoup 을 사용하여 원하는 태그를 찾는 방법을 알아봤습니다. read_html 에 html 소스코드를 텍스트 형태로 넣어서 테이블 태그만 찾아왔습니다. while 반복문, if 조건문을 사용해서 특정 날짜까지 데이터를 수집했습니다. 중복데이터 제거, 컬럼명변경, 파생변수 생성, 마지막 거래일로 파일명 만들기 csv 파일로 저장하고 불러오기를 했습니다.
'TIL' 카테고리의 다른 글
[TIL] 내용수집 함수만들기 (pandas) (0) | 2023.01.19 |
---|---|
[TIL] 네이버 종목토론실 스크래핑 (0) | 2023.01.12 |
[TIL] Pandas 시작하기 (0) | 2023.01.10 |
[TIL] 파이썬 기초 수업 끝 - (0) | 2023.01.06 |
[TIL] 파이썬 기초 - 클래스, 상속, 상관분석 (0) | 2023.01.05 |
블로그의 정보
Study Log by Holly
Holly Yoon