데코레이팅까지 해봤는데 안되네요;; 조언부탁드립니다.
271
작성한 질문수 9
지난시간에 작동시간 연습했던게 생각이나서 해봤는데 아래와 같이 에러메세지가 나옵니다. 데코레이팅없이 그냥 단독실행하면 정상작동합니다. 실행시 2개 인자(start,end)를 전달했다고 생각했는데 뭐가 문제일까요? 조언 감사드립니다.
아 그리고 평가 코멘트도 추출해보려했는데 공백과 /n/b/.. 같은 태그들이 같이 있어서 실패했습니다. 어떻게 할수 있나요? 오른쪽과 같이 시도했었습니다. comments = i.select_one('td.title').text.strip()
import requests
from bs4 import BeautifulSoup
import pandas
import time
def time_check(func):
def wrapper(*args,**kwargs):
start_time = time.time()
result = func(*args,**kwargs)
end_time = time.time() - start_time
print('{}함수 {}페이지에서 {}까지, 실행시간 {}'.format(func.__name__,args[0],args[1],end_time))
return result
return wrapper()
@time_check
def naver_movie(start, end):
lists = []
for p in range(start,end+1):
url = 'https://movie.naver.com/movie/point/af/list.nhn?&page={}'.format(p)
request = requests.get(url)
bs = BeautifulSoup(request.text,'lxml')
trs = bs.select('table.list_netizen > tbody > tr')
for i in trs:
ac_num = i.select_one('td.ac.num').text
title = i.select_one('td.title > a').text
score = i.select_one('td.title > div > em').text
# comments = i.select_one('td.title').text.strip()
writer = i.select_one('td.num > a').text
lists.append([ac_num,writer, title, score])
#print(ac_num, title, score, writer)
return lists
naver_movie(1,2)
C:\Python\venv\Scripts\python.exe C:/Python/venv/네이버평점.py
Traceback (most recent call last):
File "C:/Python/venv/네이버평점.py", line 17, in <module>
def naver_movie(start, end):
File "C:/Python/venv/네이버평점.py", line 14, in time_check
return wrapper()
File "C:/Python/venv/네이버평점.py", line 10, in wrapper
result = func(*args,**kwargs)
TypeError: naver_movie() missing 2 required positional arguments: 'start' and 'end'
Process finished with exit code 1
답변 1
1
return wrapper() 가 아니라 return wrapper 입니다. wrapper() 는 함수를 실행하는 문법이고 return wrapper 는 함수자체를 리턴하는 부분입니다.
댓글 부분은 말씀하신 코드로 했을때 문제 없이 동작합니다. 다만 원하는 형태로 나오지 않는다는 말씀을 하신것 같은데 이를 "실패" 라고 하지는 않습니다. 동작에는 문제가 없으니 그렇게 추출된 데이터에서 원하는 형태로 문자열을 다시 재가공해서 사용할 수 있는 내용으로 보여집니다.
comments = i.select_one('td.title').text.replace("\n", "").replace("신고", "").strip()
위의 예시처럼 엔터('\n') 값, 필요없는 문자열('신고') 같은 내용을 모두 빈문자열 ("") 로 치환해서 사용하실수도 있습니다.
도움이 되셨길 바랍니다.
38강 = 연산자 더하고 빼기
0
60
2
주석처리
0
116
1
함수의 파라미터값 msg
0
155
1
강의자료 이미지 안나옴
0
239
3
강의자료 질문 두번째
0
165
3
강의자료 관련 질문
0
116
1
파이썬 예외 처리 try / except 파일 처리 코드가 실행이 안됩니다.
0
235
1
소수 너무 어려워요
0
245
1
imagefont 함수 사용
0
239
1
pylint
0
357
1
add 함수 문의 ㅠㅠ
0
283
1
형식 문의드립니다.
0
209
1
변수 명을 왜 src, tar로 하셨는지 궁금합니다.
0
602
1
숫자야구 코드를 짜 봤는데 뭔가 이상합니다.
0
253
1
zsh: command not found: pylint
0
269
1
텔레그램 봇 만들기 코드 실행이 안됩니다 박사님..ㅠ
0
546
1
질문드립니다.
1
374
2
list.reverse() 출력에 대해서 질문있습니다.
1
433
1
데코레이터 함수 및 동작시간 질문입니다.~
1
323
2
opencv 사용하면서 궁금한점 (해상도)
1
781
1
질문드립니다.
1
299
1
아래 오류가 뜨면서 vscode가 컴파일이 되지 않는데.. 혹시 왜이럴까요?
1
445
1
크롤링안되는 현상 문의 드립니다.
1
421
1
파이썬 크롤링 관련 문의
1
277
1





