[Python] 크롤링 패턴 실습

2023. 4. 11. 17:09Language/Python

- 크롤링 핵심 코드 패턴

import requests                                                         # 라이브러리 임포트

from bs4 import BeautifulSoup

res = requests.get('https://taehee98.tistory.com/')    # 웹페이지 가져오기

soup = BeautifulSoup(res.content, 'html.parser')      # 웹페이지 파싱하기 ※ 파싱이란? 문자열의 의미 분석

mydata = soup.find('title')                                          # 필요한 데이터 추출하기

print(mydata.get_text())                                             # 추출한 데이터 활용하기

개발 일기

 

requests - 웹페이지 가져오기 라이브러리

bs4 (BeautifulSoup) - 웨페이지 분석(크롤링) 라이브러리

 

res.content 내용

soup = BeautifulSoup(res.content, 'html.parser') - 가져온 웹 페이지 content를 html.parser로 분석한것을 soup 변수에 담음

soup의 내용

soup.find(추출하고자 하는 태그 입력) 

 

import requests
from bs4 import BeautifulSoup
res = requests.get('https://taehee98.tistory.com/')
soup = BeautifulSoup(res.content, 'html.parser')
mydata = soup.find('h2')
print("mydata :",mydata)
print("mydata.String :", mydata.string)
print("mydata.get_text :",mydata.get_text())

mydata : <h2 class="title_section">전체 글<span>(24)</span></h2>
mydata.String : None
mydata.get_text : 전체 글(24)

 

p 태그 문장중 특정 p 태그 하나만 선택 하려면

1. data = soup.find('p', class_='cssstyle')

2. data = soup.find('p', 'cssstyle')

3. data = soup.find('p', attrs = {'align' : 'center'})

4. data = soup.find(id='body')

 

1. data = soup.find('p', class_='cssstyle')

import requests
from bs4 import BeautifulSoup
res = requests.get('https://taehee98.tistory.com/')
soup = BeautifulSoup(res.content, 'html.parser')
mydata = soup.find('li', class_='t_menu_home')
print("mydata :",mydata)
print("mydata.String :", mydata.string)
print("mydata.get_text :",mydata.get_text())

mydata : <li class="t_menu_home first"><a href="/" target="">홈</a></li>
mydata.String : 홈
mydata.get_text : 홈

 

2. data = soup.find('p', 'cssstyle')

import requests
from bs4 import BeautifulSoup
res = requests.get('https://taehee98.tistory.com/')
soup = BeautifulSoup(res.content, 'html.parser')
mydata = soup.find('li', 't_menu_home')
print("mydata :",mydata)
print("mydata.String :", mydata.string)
print("mydata.get_text :",mydata.get_text())

mydata : <li class="t_menu_home first"><a href="/" target="">홈</a></li>
mydata.String : 홈
mydata.get_text : 홈

 

3. data = soup.find('p', attrs = {'align' : 'center'})

import requests
from bs4 import BeautifulSoup
res = requests.get('https://taehee98.tistory.com/')
soup = BeautifulSoup(res.content, 'html.parser')
mydata = soup.find('footer', attrs = {'id' : 'footer'})
print("mydata :",mydata)
print("mydata.String :", mydata.string)
print("mydata.get_text :",mydata.get_text())

 

4. data = soup.find(id='body')

import requests
from bs4 import BeautifulSoup
res = requests.get('https://taehee98.tistory.com/')
soup = BeautifulSoup(res.content, 'html.parser')
mydata = soup.find(id = 'footer')
print("mydata :",mydata)
print("mydata.String :", mydata.string)
print("mydata.get_text :",mydata.get_text())

 

 

import requests
from bs4 import BeautifulSoup
res = requests.get('https://taehee98.tistory.com/')
soup = BeautifulSoup(res.content, 'html.parser')
mydata = soup.find_all('strong','name')

for item in mydata:
    if item.string != None:
        print(item.string)

[Python] jupyter notebook 기본 사용법 Python 문법
[SQLD] SQL 최적화 기본
[SQLD] 데이터 모델과 성능
[SQLD] 데이터 모델링의 이해

 

추출한 것에서 또 추출하기

import requests
from bs4 import BeautifulSoup
res = requests.get('https://davelee-fun.github.io/blog/crawl_test')
soup = BeautifulSoup(res.content, 'html.parser')

section = soup.find('ul', id='dev_course_list') - 추출 하고싶은 데이터를 section 에 담고
titles = section.find_all('li', 'course') - 또다시 추출 하기
for title in titles:
    print(title.get_text())

(초급) - 강사가 실제 사용하는 자동 프로그램 소개 [2]
(초급) - 필요한 프로그램 설치 시연 [5]
(초급) - 데이터를 엑셀 파일로 만들기 [9]
(초급) -     엑셀 파일 이쁘게! 이쁘게! [8]
(초급) -     나대신 주기적으로 파이썬 프로그램 실행하기 [7]
(초급) - 파이썬으로 슬랙(slack) 메신저에 글쓰기 [40]
(초급) - 웹사이트 변경사항 주기적으로 체크해서, 메신저로 알람주기 [12]
(초급) - 네이버 API 사용해서, 블로그에 글쓰기 [42]
(중급) - 자동으로 쿠팡파트너스 API 로 가져온 상품 정보, 네이버 블로그/트위터에 홍보하기 [412]

 

문자열 함수와 함께 쓰기 (데이터 전처리)

import requests
from bs4 import BeautifulSoup
res = requests.get('https://davelee-fun.github.io/blog/crawl_test')
soup = BeautifulSoup(res.content, 'html.parser')

 

section = soup.find('ul', id='dev_course_list')
titles = section.find_all('li', 'course')
for index, title in enumerate(titles):
    print(str(index + 1) + '.', title.get_text().split('-')[-1].split('[')[0].strip())

1. 강사가 실제 사용하는 자동 프로그램 소개
2. 필요한 프로그램 설치 시연
3. 데이터를 엑셀 파일로 만들기
4. 엑셀 파일 이쁘게! 이쁘게!
5. 나대신 주기적으로 파이썬 프로그램 실행하기
6. 파이썬으로 슬랙(slack) 메신저에 글쓰기
7. 웹사이트 변경사항 주기적으로 체크해서, 메신저로 알람주기
8. 네이버 API 사용해서, 블로그에 글쓰기
9. 자동으로 쿠팡파트너스 API 로 가져온 상품 정보, 네이버 블로그/트위터에 홍보하기

 

CSS Selector 사용법

select() 안에 태그 또는 CSS class 이름등을 넣어주면 됨

결과값은 리스트 형태로 반환됨

     ㄴ 매칭되는 첫번째 데이터만 얻고자 할 때는 select_one(), 이 때는 해당 아이템 객체가 리턴

 

select('ul li a')

select('ul a')

select('ul > li > a')

 

클래스가 두개일때

select('.course.paid')

 

import requests
from bs4 import BeautifulSoup

res = requests.get('https://davelee-fun.github.io/blog/crawl_test_css.html')
soup = BeautifulSoup(res.content, 'html.parser')
items = soup.select('#start') - 아이디로 추출, select('.course')클레스 로 추출
for item in items:
    print(item.get_text())

(왕초보) - 클래스 소개
(왕초보) - 블로그 개발 필요한 준비물 준비하기
(왕초보) - Github pages 설정해서 블로그 첫 페이지 만들어보기
(왕초보) - 초간단 페이지 만들어보기
(왕초보) - 이쁘게 테마 적용해보기
(왕초보) - 마크다운 기초 이해하고, 실제 나만의 블로그 페이지 만들기
(왕초보) - 다양한 마크다운 기법 익혀보며, 나만의 블로그 페이지 꾸며보기

 

import requests
from bs4 import BeautifulSoup

res = requests.get('https://davelee-fun.github.io/blog/crawl_test_css.html')
soup = BeautifulSoup(res.content, 'html.parser')
item = soup.select_one('ul#dev_course_list > li.course.paid') - 하나만 추출 하고자 할때 select_one 사용
print(item.get_text())

(중급) - 자동으로 쿠팡파트너스 API 로 가져온 상품 정보, 네이버 블로그/트위터에 홍보하기 [412]

 

import requests
from bs4 import BeautifulSoup

 

요청 페이지가 없을때 확인 하는 코드
res = requests.get('https://taehee98.tistory.com/tttt')
if res.status_code != 200:
    print ('페이지 없음')
else:
    soup = BeautifulSoup(res.content, 'html.parser')

    data = soup.select('h4.card-text')
    for item in data:
        print (item.get_text())

페이지 없음
반응형