웹 크롤링이란, 웹사이트를 구성하는 HTML을 가져오는 것이다. 그리고 그 안에서 원하는 정보를 가져올 수 있다.
차근차근해보겠다.
라이브러리 import
먼저 크롤링에 필요한 라이브러리는 "requests"이다
import requests
객체 생성
이렇게 필요한 라이브러리를 불러 왔다. 다음은 객체를 생성하는 게 당연한 순서이다. 객체란, 형태를 가진 뭔가를 만든다고 생각하면 된다. 한번 출력까지 해보겠다.
res = requests.get("http://naver.com")
print(res)
출력
<Response [200]>
res라는 객체를 생성했다. 우린 get() 함수를 써서 네이버 홈 화면의 HTML 코드를 가져왔다.
get() 안에 내가 원하는 주소를 적어준다.
그런데 출력이 "<Response [200]>" 이라는 이상한 출력문이 나왔다. 이 말은 정상적으로 가져왔다는 뜻이다.
잘 가져 왔다.
User-Agent, 403 에러코드 해결방법
근데 간혹 "403"이라는 코드가 뜨는데 이건 권한이 없다는 의미다. 권한이 없는 이유는 여러 가지가 있다.
그중 하나의 이유는 기계가 홈페이지에 접속하지 못하게 막아 두는 경우도 있다. 이럴 때 우린 기계가 아님을 증명하기 위해 User-Agent라는 도구가 필요하다
https://www.whatismybrowser.com/detect/what-is-my-user-agent
이 홈페이지에 들어가면 고유의 코드가 나온다. 그럼 파란색 박스에 있는 코드를 복사해서 가져온다
그리곤 중요한 부분인데. 딕셔너리 형태로 저장한다. { "User-Agent" : }는 우리가 적어줘야 한다.
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)...." }
res = requests.get("http://naver.com" , headers)
headers라는 변수에 저장해준다. 그리고 get() 함수 안에 원하는 주소를 입력하고 headers를 집어넣어준다.
이러면 기계의 접근을 막았던 홈페이지의 HTML을 가져올 수 있다.
res.raise_for_status() 에러코드 해결방법
우린 다양한 제약과 에러가 있는데 그럴 때 에러가 났다는 걸 알려주는 코드가 있다.
바로 "raise_for_status()"이다. 만약 에러가 있다면 멈춰주고 에러를 알려준다
사용법은 굉장히 간단하다.
res.raise_for_status()
이렇게 한 줄이면 된다.
text 코드 가져오기
우린 HTML의 코드를 가져와서 객체를 만들었다. HTML 코드는 text 코드로 들어가 있다.
print(res.text)
출력
홈페이지의 HTML 코드
엄청나게 많은 코드들이 있다. 자 우린 이제 여기서 원하는 정보만 가져오면 된다. 이런 정보를 가지고 또 다른 객체를 만든다 이때 BeautifulSoup이라는 라이브러리가 사용된다.
BeautifulSoup
사용법은 간단합니다. 데이터를 주어주고 "lxml"의 형식으로 저장합니다. 다른 방법도 있지만 "lxml" 의 형식으로 통일합니다.
soup = BeautifulSoup(res.text, "lxml")
이렇게 soup이라는 객체를 생성했습니다. 우린 앞으로 soup에서 필요한 정보를 가져올 것입니다.
다음엔 이렇게 만든 걸 가지고 원하는 애들만 끌어와보겠습니다.
'개발 Tools > 파이썬_Webcrawling' 카테고리의 다른 글
webcrawling (웹크롤링) 네이버 기사 (시간, 타이틀, 링크) 크롤링 ( find, find_all, attrs, a["href"]) (3) | 2021.07.13 |
---|
댓글