본문 바로가기

Study/개발일지

[스파르타코딩]웹개발종합반3주차 개발일지

 

 

requests 라이브러리 사용 

 

 

파이썬 예제 실행도중 에러발생하면 

 

html 코딩연습을 하는 와중에 처음에는 되다가 코딩을 하고 웹페이지 확인을 위해서 액션을 눌러서 디버깅하려고 하는데 지속적인 File "<stdin>", line 1 SyntaxError: invalid syntax오류 코드가 나와서 어리둥절하고 있었다.

SyntaxError: invalid syntax
>>> C:/Users/User/anaconda3/python.exe c:/Users/User/homepage/templastes/views.py
  File "<stdin>", line 1
    C:/Users/User/anaconda3/python.exe c:/Users/User/homepage/templastes/views.py
      ^
SyntaxError: invalid syntax
>>>

그러면

exit() 를 입력하거나 컨트롤 z를 입력하면 다시 정상 작동한다.

그 이유는 무엇일까

 

오류의 내용은

 
 

파일의 1번째줄에서 ^표시된 부분에 잘못된 구문으로 인해 오류가 발생했다는 뜻이다.

 

그런데 명령프롬트창에 ctrl+z나 exit()를 입력하고 다시 실행하면 된다.

 

이 부분 참조 

 

 

 

크롤링 : 웹페이지에서 정보를 가져오는 것 

 

 

bs4 라이브러리 설치 

 

pip install 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(URL, headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
 
 
 
디버깅툴 켜서 영화사이트에서 영화제목 링크 우클릭하여 copy selector  실행 
 
 
앞뒤로 붙은 텍스트를 없애줌
strip() 
 
 
문자열 치환
replace
 
 
 
mongo db 활용
 
사용자 추가 
 
 
 
 

 

 

실행 예제

 

사용자 추가후 모든 사용자 출력

from pymongo import MongoClient
client = MongoClient('mongodb+srv://sparta:test@cluster0.w4kj2pc.mongodb.net/?retryWrites=true&w=majority')
db = client.dbsparta

#doc = {'name':'영희','age':30}
#db.users.insert_one(doc)

#doc = {'name':'철수','age':20}
#db.users.insert_one(doc)



all_users = list(db.users.find({},{'_id':False}))


for a in all_users:
    print(a)
 
 
-- 코드 요약 
 
# 저장 - 예시
doc = {'name':'bobby','age':21}
db.users.insert_one(doc)

# 한 개 찾기 - 예시
user = db.users.find_one({'name':'bobby'})

# 여러개 찾기 - 예시 ( _id 값은 제외하고 출력)
all_users = list(db.users.find({},{'_id':False}))

# 바꾸기 - 예시
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})

# 지우기 - 예시
db.users.delete_one({'name':'bobby'})
 
 
- 퀴즈 풀어보기 
 
from pymongo import MongoClient
client = MongoClient('mongodb+srv://sparta:test@cluster0.w4kj2pc.mongodb.net/?retryWrites=true&w=majority')
db = client.dbsparta

#한개찾기

movie = db.movies.find_one({'title':'토리와 로키타'})

#print(movie['rate'])



target_rate = movie['rate']

#movies = list(db.movies.find({'rate':target_rate},{'_id':False}))

#for a in movies:
#    print(a['title'])


db.movies.update_one({'title':'토리와 로키타'},{'$set':{'rate':0}})

 

 

-- 과제 

 

지니뮤직 음원 순위 스크랩 하기 

 

from pymongo import MongoClient
client = MongoClient('url입력하세요')
db = client.dbsparta

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(URL, headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')

#print(soup)

#title = soup.select_one('#mainContent > div > div.box_ranking > ol > li:nth-child(1) > div > div.thumb_cont > strong > a')


#print(title.text)


#print(title['href'])

lis = soup.select('.list-wrap > tbody > tr.list')

#print(lis)


for li in lis:
    title = li.select_one('td.info > a.title.ellipsis').text.strip()
    rank = li.select_one('td.number').text[0:2].strip()
    artist = li.select_one('td.info > a.artist.ellipsis').text
    print(rank, title, artist)



   
728x90