본문 바로가기
프로그래밍/Python

Web scraping with python(urlopen) 기초,연습

by LiveData 2018. 12. 1.
반응형

0. 들어가기


 대학교 과제로 웹 크롤러를 만들면 교수님들이 좋아신다.




1. 기초


지난 시간에 설치까지 해보고 예제코드 까지 해보았습니다.

url 입력을 받을 수 있는 urllib.request를 추가합니다.


    
1
2
3
4
5
6
from urllib.request import urlopen
from bs4 import BeautifulSoup
 
html=urlopen("http://naver.com")
bsObj=BeautifulSoup(html.read(),"lxml");
print(bsObj.h1)

cs



읽어드린 html 파일을 BeautifulSoup로 분석할 수 있도록 추가합니다.



html 변수에 읽어드린 네이버 홈페이지를 BeautifulSoup로 변환한 후


print로 출력할때 h1의 태그로 된 것을 출력합니다.




실행 하면 이런식으로 <h1> 태그를 볼 수 있습니다.


bsObj.h1 의 뜻은 html -> body -> h1 찾아서 출력해줍니다.


페이지에 오류가 발생한 경우



2가지 오류


 1. 서버에서 페이지를 찾을 수 없을 때


 2. 서버를 찾을 수 없을때




첫번째 경우 뜨는 오류 : "404 Page Not Found" , "500 Interval Server Error


아래와 같은 오류가 뜹니다.


 



이 경우 오류를 "HTTPError" 로 하여 예외처리를 해주어야 한다. 


from urllib.error import HTTPError <<추가 하는거 잊지마시구요



1
2
3
4
5
6
7
8
9
10
11
from urllib.request import urlopen
from bs4 import BeautifulSoup
from urllib.error import HTTPError
 
try:
except HTTPError as e:
    print(e)
else:
    bsObj=BeautifulSoup(html.read(),"lxml");
    print(bsObj.a)
cs


이 코드를 실행할 경우 HTTP Error 404: Not Found 라는 오류를 출력합니다. (정상작동)




태그가 있는지 예외 처리를할 경우


1
2
3
4
5
6
7
8
9
10
11
12
13
from urllib.request import urlopen
from bs4 import BeautifulSoup
from urllib.error import HTTPError
 
try:
except HTTPError as e:
    print(e)
try:
    bsObj=BeautifulSoup(html.read(), "lxml")
    title=bsObj.body.h1
except AttributeError as e:
    print(e)
cs


만약 홈페이지가 있으나 원하는 태그가 없을경우 AttributeError을 통해서 오류를 확인할 수 있습니다.



반응형