티스토리 뷰
이정인 기술사님의 파이썬 핵심함수 특강 2강의 내용이다.
이번 2강의 내용은 html의 기본적인 구조에 대해서 알고 있으면 유리하다.
import urllib.request
d = urllib.request.urlopen("http://www.naver.com/")
naver를 호출했다. 이제 본문에 해당하는 html을 data라는 키워드로 호출할 수 있게 해보자.
이때 이 html의 인코딩 방식이 무엇인지 알려주어야 한다. 보편적으로는 utf-8.
data = d.read()
data = data.decode("utf-8")
for문으로 header에 있는 정보들을 반복해서 출력한다.
status=d.getheaders()
for s in status:
print(s)
다음으로 우리가 서버에 요청해서 받은 것이 정상적인 응답인지 확인해보자. 200이 아닌 다른 숫자가 나오면 모두 오류이므로, if문을 사용해서 검증한다.
print(d.status)
if d.status == 200:
print(d.read().decode("utf-8")
※참고
앞에서 data = d.read()로 끝까지 다 읽었기 때문에 다시 data=d.read()를 호출하면 더 읽을 수 없다는 뜻의 메시지가 출력된다.
웹페이지 html 데이터를 그대로 가져와봄으로써 크롤링의 가장 기초적인 부분을 살펴보았다.
그런데 만약 로그인 등 별도 권한이 있어야 접속할 수 있는 페이지를 크롤링하려면 어떻게 해야 할까?
몇 가지 방법이 있는데 일단 Beautiful Soup에 대해서 알아보고 넘어가도록 한다.
from bs4 import Beautifulsoup
bs = Beautifulsoup(html)
물론 bs를 이렇게 가져오기 전에 html이 정의되어 있어야 하긴 함(예제에서는 임의의 html 태그가 html=""로 연결되어 있지만 생략하겠다).
Beautiful Soup는 html을 파싱할 수 있게 하는 라이브러리이므로, html 속에 있는 p 태그를 전부 찾아볼 수도 있다.
print(bs.find("p"))
모든 p 태그를 찾아서 list 형태로 반환하려면 이렇게 하자.
print(bs.find_all("p"))
이렇게 작성하면 정렬이 center로 되어 있는 p태그만 찾아 줄 것이다.
print(bs.find("p", align="center"))
align 자리에 width, class_를 넣어서 이것저것 골라내볼 수 있다.
※참고
class는 파이썬에서 예약어로 지정된 식별자이므로 html 태그에서 class를 골라내기 위해서는 class_와 같이 언더바를 붙여주어야 한다.
예약어와 식별자 개념 복습하기☞ ehpub.co.kr/3-python%EC%9D%98-%EC%98%88%EC%95%BD%EC%96%B4keyword%EC%99%80-%EC%8B%9D%EB%B3%84%EC%9E%90identifiers/
body 안에서 img 태그가 쓰인 곳을 모두 골라내 보자.
bodytag = bs.find("body")
list1 = bodytag.find_all(["p", "img"])
범위를 지정한 다음에 list1 안에서 for문으로 돌면서 tag를 모두 골라내오면 된다.
for tag in list1:
print(tag)
마지막으로 body tag 안에 있는 text만 꺼내오는 method인 get_text를 알아보자.
print(bodytag.get_text())
'공부 > Python' 카테고리의 다른 글
20210122 오늘공부: Numpy 기본함수 다루기 (0) | 2021.01.23 |
---|---|
20210121 오늘공부: Numpy 기본함수 다루기 (0) | 2021.01.21 |
20201221 오늘의 공부 (0) | 2020.12.21 |
미래의 나를 위해 남겨두는 문자열 리스트 정형화 함수 (0) | 2020.12.18 |
파이썬의 자료구조 (0) | 2020.12.15 |
- Total
- Today
- Yesterday
- 코드스테이츠
- Notion2Tistory
- 이자포스터디
- 이력서
- 취업준비
- 빅데이터
- 빅데이터분석기사
- 데이터준전문가
- Kaggle
- todayIlearned
- 코테공부
- data annotation
- ai부트캠프
- Til
- 인공지능
- 깃허브
- 데이터과학
- 개발자포트폴리오
- googlecolab
- 데이터준전문가합격후기
- github
- ADsP
- 자버
- 빅분기후기
- ADsP합격후기
- 커리어코칭
- 빅분기합격
- 자격증
- 빅분기
- 데이터분석
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |