파이썬 인터넷 웹페이지 크롤링 라이브러리
파이썬으로 웹페이지를 크롤링하기 위해서는 기본적으로 아래 4가지의 라이브러리를 많이 사용합니다.
- requests : 페이지 요청 라이브러리
- bs4의 BeautifulSoup : HTML 다루는 라이브러리
- time : 안전하게 수집하는 방법
- pandas : 수집한 데이터 엑셀화
추가로 이전 포스팅에서 다뤘던 정규표현식까지 사용해주면 조금 더 편리하게 사용할 수 있습니다.
https://codevang.tistory.com/344
로또 번호 크롤링해서 가져오기
먼저 다음 사이트에서 "로또"를 검색해봅니다.
사이트 주소를 복사한 뒤 "requests" 라이브러리를 통해 페이지를 요청합니다.
결과가 200번대이면 문제없음, 400번대이면 페이지 없음 등의 에러발생, 500번대면 권한 문제 등의 문제입니다.
url = requests.get("https://search.daum.net/search?w=tot&DA=YZR&t__nil_searchbox=btn&q=%EB%A1%9C%EB%98%90")
#200 문제없음 #400 : 존재하지 않는페이지 #500 : 로그인처리, 잠금 등
url
"requests.get()"을 통해 받은 객체는 응답 번호를 출력해줍니다.
응답받은 내용 전체를 출력하려면 "text"를 사용해줍니다.
url.text
이제 "requests" 라이브러리의 역할은 끝났습니다.
가져온 HTML 문자열을 이쁘게 정리해주기 위해 "BeautifulSoup" 라이브러리를 사용해줍니다.
html = BeautifulSoup(url.text)
html
이제 여기서 가져올 클래스명을 찾아야합니다.
찾고자 하는 데이터에서 우클릭 후 "검사"를 누르면 오른쪽에 개발자툴이 뜨면서 HTML 코드 등이 나옵니다.
로또 번호들은 "div class = "lottonum"안에 모두 묶여 있는 것을 확인할 수 있습니다.
해당 클래스에 접근해 데이터를 뽑아봅니다.
lotto = html.find("div", class_ = "lottonum")
필요한 클래스의 내용을 깔끔하게 가져왔습니다.
여기서 숫자만 골라내기 위해 한 번 더 작업해 줍니다.
두 가지 방법이 있는데 먼저 "find_all()" 함수를 통해 해당 내용 안 특정 클래스의 내용만 다시 가져오는 방법입니다.
번호가 안에 들어있는 "span"으로 검색해봅니다.
lotto = html.find("div", class_ = "lottonum").find_all("span")
span 클래스만 가져와서 깔끔하게 리스트 형태로 정리해줍니다.
다만 리스트 클래스는 아니고 bs4.element.ResultSet 클래스이기 때문에 계속해서 해당 클래스가 가지고 있는 기능들을 사용할 수 있습니다.
리스트 형태의 iterable 자료형이므로 for문을 통해 하나씩 가져와 작업해줄 수 있습니다.
리스트 안에 들어있는 저 내용들도 일반 str 문자열이 아닌 bs4의 클래스 객체 타입이기 때문에 text 기능을 사용할 수 있습니다.
lotto = html.find("div", class_ = "lottonum").find_all("span")
for i in lotto:
print(i.text)
"i.text" 에서 나온 결과들은 str 문자열이므로 해당 문자열들을 배열에 집어넣으면서 로직 처리를 해 보너스와 같은 글자들을 제외하면 됩니다.
하지만 위의 방법을 사용할 경우 로직이 복잡해지기 때문에 처음부터 정규표현식을 사용하면 매우 간단하게 번호만 추출할 수 있습니다.
먼저 find() 함수에서 "text"를 사용해 태그가 아닌 문자 부문만 문자열 형태로 받습니다.
lotto = html.find("div", class_ = "lottonum").text
로직을 짜려면 못짤것도 없지만 정규표현식을 이용해 간단히 걸러줍니다.
숫자가 하나이상 있는 것만 매칭한다는 의미의 "\d+"를 사용해주면 숫자만 골라서 리스트에 넣어줍니다.
box = re.findall("\d+", lotto)
웹크롤링은 문자열들이 일정한 규칙을 가지지 않기 때문에 일일이 로직을 짜기 보다는 정규표현식을 사용해 간단히 걸러내는 것이 효율적일 것 같습니다.
'파이썬 > 라이브러리(API)' 카테고리의 다른 글
파이썬 뉴스 기사 크롤링 및 빈도 분석, 워드 클라우드 그리기 (0) | 2024.03.14 |
---|---|
파이썬 웹페이지 크롤링 표를 데이터프레임으로 만들기 (0) | 2024.03.11 |
파이썬 판다스 데이터에 순위 매기기 (0) | 2024.03.08 |
판다스 데이터프레임 행과 열 값 바꾸기 (0) | 2024.03.07 |
판다스 데이터 누락값(결측치) 처리하기 (0) | 2024.03.07 |
댓글