- 웹 스크래핑(웹 크롤링) : 라이브러리를 활용해 내려받은 html 에서 내가 원하는 정보 솎아내는 것
-
import requests from bs4 import BeautifulSoup headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'} data = requests.get('https://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=pnt&date=20200303',headers=headers) # requests로 불러온 html 정보를 soup 변수에 담기 soup = BeautifulSoup(data.text, 'html.parser') # 태그 하나만 # 웹에서 원하는 부분 검사 후 copy selector해서 붙혀넣기 title = soup.select_one('#old_content > table > tbody > tr:nth-child(2) > td.title > div > a') # 불러온 태그 세부정보 print(title.text) print(title['href']) # 태그 여러개 -> 리스트 # 구조 파악해서 상위 태그 붙혀넣기 movies = soup.select('#old_content > table > tbody > tr') # movies (tr들)의 반복문 돌리기 for movie in movies: # movie 안에 a 가 있으면, a_tag = movie.select_one('td.title > div > a') if a_tag is not None: # a의 text를 찍어본다. print (a_tag.text)
- 웹페이지 마다 구조가 다르므로 전략을 그때마다 다르게 설정
-
# 선택자를 사용하는 방법 (copy selector) soup.select('태그명') soup.select('.클래스명') soup.select('#아이디명') soup.select('상위태그명 > 하위태그명 > 하위태그명') soup.select('상위태그명.클래스명 > 하위태그명.클래스명') # 태그와 속성값으로 찾는 방법 soup.select('태그명[속성="값"]') # 한 개만 가져오고 싶은 경우 soup.select_one('위와 동일')
-
웹 크롤링 연습 (랭킹, 제목, 별점 정보 가져오기)import requests from bs4 import BeautifulSoup headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'} data = requests.get('https://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=pnt&date=20200303',headers=headers) soup = BeautifulSoup(data.text, 'html.parser') movies = soup.select('#old_content > table > tbody > tr') print(movies) for movie in movies: rank = movie.select_one('td.ac > img') title = movie.select_one('td.title > div > a') point = movie.select_one('td.point') if title is not None: print (rank['alt'], title.text, point.text)
'course > spartacoding' 카테고리의 다른 글
[웹개발 종합반] 3주차 (5) 3주차 과제 (0) | 2021.11.02 |
---|---|
[웹개발 종합반] 3주차 (4) Database (0) | 2021.11.01 |
[웹개발 종합반] 3주차 (2) Python 라이브러리 (0) | 2021.11.01 |
[웹개발 종합반] 3주차 (1) Python 기초 (0) | 2021.11.01 |
[웹개발 종합반] 2주차 (5) 2주차 과제 (0) | 2021.10.29 |