웹 크롤링(web crawling): 수많은 웹사이트들을 체계적으로 돌아다니면서 URL, 키워드 등을 수집하는 것. 보통 검색 엔진이 웹사이트를 인덱싱하기 위해서 사용됨.
웹 스크래핑(web scraping): 웹사이트에서 필요한 데이터를 긁어오는 것.
ㅁ API를 사용하여 데이터를 수집하는 이유
> API : application programming interface
- 허가된 인원만 정보를 제공, 누가 수집해 갔는지 파악
- 유료로 데이터를 판매하고 있는 사이트는 데이터 용량 등에 따라 과금
- 실시간성으로 제공하고자 하는 데이터(공공데이터)의 경우. 예) 부동산실거래가 정보 등
- 특정 사이트에 무리하게 네트워크 요청시 서버에 다운 가능
예) 다수 인원이 특정한 작은 쇼핑몰에 한번에 요청을 보내면 서버 다운 가능.
-> API용 서버를 별도운영시, 데이터를 무리하게 읽어 갔을 때 운영하고 있는 서비스의 서버에
무리가 가지 않게 분리 운영 가능. 현재 네이버, 카카오, 유튜브 등은 API를 따로 제공 중.
또한, API를 제공시 제공 가능한 데이터에 한해서 제공.
(현재 페이스북은 자기계정에 대한 데이터만 가져갈 수 있게 API를 제공 중)
ㅁ 경로
- / 가장 상위 경로
- ./ 해당 경로
- ../ 상위 경로
- Disallow: / 크롤러가 모든 경로의 데이터를 가져가지 말라는 위미.
- Allow : / $ 첫 페이지만 허용
ㅁ 데이터 수집시 주의할 점
- 로봇 배제 표준
- 저작권
- 무리한 네트워크 요청
> DDOS 공격 예방을 위한 time.slee() 사용
- 1. url, html 소스코드를 넣어주게 되면 테이블 테그를 찾아서 반환
- 2. url을 넣어주면 특정 url에 접근해서 html 페이지의 table tag를 읽어옴
- 3. html페이지의 table tag는 <table></table>로 구성
- 4. 해당 mtml의 모든 table을 가져와서 리스트 형태로 반환
- 5. 반환된 리스트를 indexing하게 되면 데이터프레임으로 구성
ㅁ FinanceDataReader
* 국내/해외 주가, 지수 정보를 가져오는 라이브러리.
ㅁ display()
- 한 셀에서 여러개의 출력 가능
ㅁ get과 query string
- get으로 url 을 호출하면 정보를 반환
- url 에 query string(parameter)을 작성하여 원하는 정보를 요청
ㅁ post와 form data
- post 방식으로 url 을 호출시 정보를 반환
- header에 form data를 숨겨서 원하는 정보를 요청
ㅁ df.colums
- 데이터프레임의 컬럼명 프로퍼티
- 데이터프레임의 컬럼명들을 가져옴
ex) df2 = df1.colums
df2.colums = [’컬럼명1’, ‘컬렴명2’, …, ‘컬럼명n’]
ㅁ pd.concat
- 두개의 데이터 프레임을 하나로 합칩니다.
- 기본 값은 axis = 0, 즉 기본으로는 열을 합칩니다.(아래로 붙인다.)
- axis = 1, 오른쪽에 새로운 컬럼을 생성하여 합칩니다.(옆으로 붙인다.)
ㅁ df.dropna()
- 데이터프레임 내부의 Null 값을 찾아 행을 삭제합니다.
ㅁ str.contains(pat, case=True, flags=0, na=None, regex=True)
- pat = 시리즈 내부에서 찾을 조건
- case = 대소문자 구분. True면 대소문자 구분 O, False면 대소문자 구분 X
- flags = re(정규식) 모듈로 전달할 플래그, 예. re.IGNORECASE.
- na = Null값일 경우, numpy.nan 또는 pandas.NA로 대체합니다.
- regex = pat의 정규식 여부. True면 정규식으로 처리, False면 리터럴 문자열로 처리.
- 시리즈의 행마다 패턴(조건)에 맞는 지 확인합니다.
-> 패턴(조건)이 맞다면 True, 다르다면 False가 출력됩니다.
ㅁ tqdm - trange
- range 에 진행 단계(현재 순회하는 순서)를 확인할 수 있습니다.
- 프로그레스바를 만들어줍니다. 홀리- 신세계.
- 중간에 print 문이 있으면 프로그레스바가 단계별로 출력됩니다.
- 왠만하면 trange for 안에서는 print는 회피해야 합니다.
ㅁ df.reset_index(drop=True)
- 데이터프레임의 인덱스를 새롭게 생성합니다.
- drop=True 옵션을 넣어, 기존에 있던 인덱스는 삭제할 수 있습니다.
- drop=False (기본값)이면 기존의 인덱스를 인덱스 컬럼을 만들어 저장합니다.
ㅁ Selenium
- 브라우저를 테스트하기 위해 만들어진 라이브러리.
- 실제로 사람이 사용하는 것 처럼 모든 동작을 프로그래밍할 수 있습니다.
- 하지만, 그만큼 단점도 많습니다.
ㅁ requests
- Requests는 인간을 위해 만들어진 Python용 우아하고 단순한 HTTP 라이브러리입니다.
- 여러 가지 메서드(GET, POST, PUT, DELETE 등등)이 있습니다.
ㅁ headers
- request를 보낼 때, 헤더에 값을 설정해 줄 수 있습니다.
- 헤더는 요청의 각종 정보들을 저장하고 있습니다.
ㅁ Beautiful Soup (아름다운 슾) (이하, bs)
- HTML, XML 등에서 원하는 값을 얻기 위해 사용합니다.
- HTML을 parsing(분해)해서 원하는 값을 찾을 수 있게 구조를 바꿉니다.
- bs.find()
- bs.find_all()
- bs.select()
ㅁ pd.read_html(bs)
- 한땀 한땀 HTML에서 값을 하나씩 하나씩 불러올 필요 없이,
테이블이라면 바로 데이터프레임으로 만들어준다.
'멋쟁이사자처럼 AI School 8기(fin) > TIL(Today I Learn)' 카테고리의 다른 글
[멋쟁이사자처럼 AI스쿨 8기] Day14 SQL week1 with 이범재(제주코딩베이스캠프) (1) | 2023.01.13 |
---|---|
[멋쟁이사자처럼 AI스쿨 8기] Day12 TIL (0) | 2023.01.11 |
[멋쟁이사자처럼 AI스쿨 8기] Day10 TIL with 박조은(오늘코드) (0) | 2023.01.09 |
[멋쟁이사자처럼 AI스쿨 8기] Day9 TIL (0) | 2023.01.06 |
[멋쟁이사자처럼 AI스쿨 8기] Day8 TIL (0) | 2023.01.05 |