가수면

크롤링 본문

웹 개발/기타

크롤링

니비앙 2022. 10. 18. 21:25

단순 지칭 및 첨언

 

*requests 패키지*

import requests (requests 라이브러리 설치 필요)

 

r = requests.get('http://spartacodingclub.shop/sparta_api/seoulair')

rjson = r.json()

rows = rjson['RealtimeCityAir']['row']

for row in rows:
    gu_name = row['MSRSTE_NM']
    gu_mise = row['IDEX_MVL']
    if gu_mise < 40:
        print(gu_name)

 

*beautifulsoup (bs4) 패키지*

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.naver?sel=pnt&date=20210829',headers=headers)

 

soup = BeautifulSoup(data.text, 'html.parser')
//코딩 시작
title = soup.select_one('#old_content > table > tbody > tr:nth-child(2) > td.title > div > a'(데이터 페이지 제목 우클릭>검사>복사>selector 복사))

print(title)

<a href="/movie/bi/mi/basic.naver?code=186114" title="밥정">밥정</a>

print(title['href'])

/movie/bi/mi/basic.naver?code=186114

print(title.text)

밥정

 

*영화 제목, 순위, 평점 크롤링*

1. 제목부터 크롤링

1-1. 제목 부분 selector 복사해보기

#old_content > table > tbody > tr:nth-child(2) > td.title > div > a
#old_content > table > tbody > tr:nth-child(3) > td.title > div > a
1-2. select_one이 아닌 여러 개를 select로 잡기 (print(movies)해보면 이게 리스트 형식이라는 것을 알 수 있음)
movies = soup.select('#old_content > table > tbody > tr')

1-3. 리스트를 for문으로 돌린 뒤 제목 부분을 select_one으로 잡기
for movie in movies:
    a = movie.select_one('td.title > div > a')'

1-4. print(a)를 했을 때 None으로  뜨는 영화 순위 10 단위로 끊어주는 가로선 없애기
    if a is not None:
      print(a.text)

2. 순위 크롤링

movies = soup.select('#old_content > table > tbody > tr')
for movie in movies:
    a = movie.select_one('td.title > div > a')'
    if a is not None:
      title = a.text

2-1. 제목 부분 selector 복사해보기

#old_content > table > tbody > tr:nth-child(2) > td:nth-child(1) > img
#old_content > table > tbody > tr:nth-child(3) > td:nth-child(1) > img

2-2. 순위 부분 select_one으로 잡기

rank = movie.select_one('td:nth-child(1) > img')

2-3. 프린트 해본 뒤, 결과값으로 순위만 다시 프린트 해보기

print(rank['alt'])

2-4. 위로 올려 붙이기

rank = movie.select_one('td:nth-child(1) > img')['alt']

3. 같은 방식으로 나머지 평점까지 크롤링

star = movie.select_one('td.point').text
      print(rank,title,star)

 

 

*지니 순위, 제목, 가수 크롤링*

musics = soup.select('#body-content > div.newest-list > div > table > tbody > tr')

for music in musics:

1. 순위

rank = music.select_one('td.number').text[0:2].strip()

문자열 슬라이싱

.text[0:2] [문자 시작 번호:문자 끝 번호]

 

문자열 및 공백 제거

>>> ex_str = "     hello       "

>>> ex_str.strip()

# 'hello'

 

2. 제목

title = music.select_one('td.info > a.title.ellipsis').text.strip()

3. 가수 및 프린트

artist = music.select_one('td.info > a.artist.ellipsis').text
print(rank,title,artist)

'웹 개발 > 기타' 카테고리의 다른 글

React와 Next에 PWA 적용하기  (0) 2023.01.24
셀레니움 (selenium) 4.0 사용법  (1) 2022.11.15
서버 배포하기  (0) 2022.10.24
리눅스 명령어  (0) 2022.10.21
Pymongo DB  (1) 2022.10.19
Comments