베지밀

[웹 퍼저] 웹 페이지 정적 크롤링 헤메기 (~ing) 본문

교육, 프로젝트/화이트햇 스쿨 1기

[웹 퍼저] 웹 페이지 정적 크롤링 헤메기 (~ing)

vegimil 2023. 11. 20. 18:02

#크롤러 #파이썬 #beautifulsoup #Selenium

 

beautifulsoup로 html 정보 크롤링 해오기 -> 하위 url 수집

css selector보다는 html의 a href 태그 사용하는게 더 범용성 있는 것 같아서(?) 이 방법 사용

 

1. 정적 크롤링 vs 동적 크롤링

https://velog.io/@ljs7463/%EC%9B%B9-%ED%81%AC%EB%A1%A4%EB%A7%81BeautifulSoup-Selenium

 

[웹 크롤링]BeautifulSoup, Selenium 비교

정적수집과 동적 수집 ||정적수집|동적수집| |-|-|-| |사용패키지|urllib/requests|selenium |수집|정적인 웹페이지|정적,동적 웹페이지| |수집 속도|빠름(별도 페이지 조작 필요x)|상대적으로 느리다| |파

velog.io

이번주 목표 : urllib와 requests, bs4로 url 긁어오기

정적 페이지 : url 주소 외엔 아무것도 필요 X

동적 페이지 : 로그인을 해야만 접속 가능한 네이버 메일, 마우스 스크롤에 따라 url이 계속 변하는 네이버 지도, 드래그하면 새로운 피드가 계속 등장하는 유튜브나 인스타 …. → selenium으로 구현!

 

일단 오늘은 정적 크롤링을 구현할 것

 

2. 정적으로 크롤링하기

정적 크롤링하기 위해 아래 3개의 단계를 수행

1. 페이지 html 문서 싹 긁어오기

2. 긁어온 html 문서 파싱 -> bs4가 해줄 것

3. 파싱한 html 문서에서 원하는 정보 사용 -> 우리는 하위 url을 가져오기 위해 href 태그를 사용

 

3. 패키지 소개

1. requests

pip install requests

터미널에 위 명령어로 설치

import requests # 패키지 가져오기
url = '' # url 문자열로 입력
response = requests.get(url) # get 함수로 url로부터 html 자료 받아옴
html_text = response.text # 얻고자 하는 html 문서가 담김

 

2. bs4 : html 문서를 정리(=파싱)하는 모듈

pip install beautifulsoup4

터미널에 위 명령어로 설치

from bs4 import BeautifulSoup as bs # 보통 bs로 줄여서 씀
html = bs(html_text, 'html.parser') # html을 잘 정리된 형태로 반환

 

4. 파싱까지 하도록 코드 작성

파싱할 사이트는 모의해킹 전용 사이트인 https://demo.testfire.net/을 이용했다. gpt한테 물어보니 위키피디아도 크롤링 가능한 사이트 중 하나라고 한다. 원하는 대로 사용해도 될듯?

from urllib.request import urlopen # url을 html로 열기
from urllib.parse import quote_plus # 한글 인식
from bs4 import BeautifulSoup as bs
import requests

url = 'https://demo.testfire.net/'

response = requests.get(url)
html_text = response.text # html 문서 담기

# bs 객체 생성 (파싱 후 soup 변수에 저장)
soup = bs(response.text, 'html.parser')

 

4-1. bs4로 가져온 정보 프린트하기

잘 파싱되었는지 확인하기 위해 prettify라는 명령어로 출력해보쟈

print(soup.prettify())

https://velog.io/@lybin10/%EC%A0%95%EC%A0%81-%EC%9B%B9-%ED%8E%98%EC%9D%B4%EC%A7%80-%ED%81%AC%EB%A1%A4%EB%A7%81

 

정적 웹 페이지 크롤링

라이브러리 설치BeauitfulSoup을 임포트하여 사용연습용 html을 작성한다.BeautifulSoup 객체를 생성한다.객체에 저장된 html 내용을 확인한다.: 3에서는 분석할 HTML의 실제 웹페이지를 사용하지 않고 html

velog.io

결과 : 요런 식으로 html 값이 잘 가져와졌다

 

5. html 태그로 구분해서 url 추출