유튜브 네이버쇼핑 크롤링 예제를 따라하던 중 아래와 같은 에러가 발생함.
200 https://search.shopping.naver.com/search/all.nhn?query=숨셔바요&cat_id=&frm=NVSHATC
Traceback (most recent call last):
File "c:\Users\davincii\.vscode\extensions\ms-python.python-2019.11.50794\pythonFiles\ptvsd_launcher.py", line 43, in <module>
main(ptvsdArgs)
File "c:\Users\davincii\.vscode\extensions\ms-python.python-2019.11.50794\pythonFiles\lib\python\old_ptvsd\ptvsd\__main__.py", line 432, in main
run()
File "c:\Users\davincii\.vscode\extensions\ms-python.python-2019.11.50794\pythonFiles\lib\python\old_ptvsd\ptvsd\__main__.py", line 316, in run_file
runpy.run_path(target, run_name='__main__')
File "C:\ProgramData\Anaconda3\lib\runpy.py", line 263, in run_path
pkg_name=pkg_name, script_name=fname)
File "C:\ProgramData\Anaconda3\lib\runpy.py", line 96, in _run_module_code
mod_name, mod_spec, pkg_name, script_name)
File "C:\ProgramData\Anaconda3\lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
File "e:\00_Jobs\Crawling_Naver\stage_naver_shopping.py", line 11, in <module>
products = parse(pageString)
File "e:\00_Jobs\Crawling_Naver\parser_custom.py", line 33, in parse
product = getProductInfo(li)
File "e:\00_Jobs\Crawling_Naver\parser_custom.py", line 22, in getProductInfo
return {"name":alt, "price":priceReload.text.replace(",", ""), "link":href}
AttributeError: 'NoneType' object has no attribute 'text'
'AttributeError 크롤링 예외처리'를 구글링하여 확인한 결과, BeautifulSoup에서 정의된 속성을 찾을 수 없어 None을 return하였고, None에 text attribute를 사용하려고 하니 에러가 발생한 것으로 추정
1. 어느 li에서 에러가 발생한 것인지 확인하기 위해, AttributeError가 발생하면 빈 string을 return하도록 예외처리 추가함.
def getProductInfo(li):
# print(li)
try:
img = li.find("img")
alt = img['alt']
priceReload = li.find("span", {"class":"_price_reload"})
aTit = li.find("a", {"class":"link"})
href = aTit['href']
return {"name":alt, "price":priceReload.text.replace(",", ""), "link":href}
except AttributeError as e:
return {"name":'', "price":'', "link":''}
2. 엑셀로 저장한 데이터를 보니 19번과 21번에 문제가 있음을 확인함
3. '핫딜'이라고 표시된 19번과 21번의 class가 _price_reload가 아닌 num으로 되어 있어서 발생한 에러임을 확인함
4. 예외처리 구문을 수정하여 예외가 발생할 경우 num을 return하도록 수정하여 19, 21번도 받아올 수 있도록 함
def getProductInfo(li):
# print(li)
try:
img = li.find("img")
alt = img['alt']
priceReload = li.find("span", {"class":"_price_reload"})
aTit = li.find("a", {"class":"link"})
href = aTit['href']
return {"name":alt, "price":priceReload.text.replace(",", ""), "link":href}
except AttributeError as e:
img = li.find("img")
alt = img['alt']
priceReload = li.find("span", {"class":"num"})
aTit = li.find("a", {"class":"link"})
href = aTit['href']
return {"name":alt, "price":priceReload.text.replace(",", ""), "link":href}
# return {"name":'', "price":'', "link":''}
5. 결론적으로 예외처리를 사용하지 않고 그냥 가격은 num을 가져오도록 하면 됨....
def getProductInfo(li):
# print(li)
img = li.find("img")
alt = img['alt']
priceReload = li.find("span", {"class":"num"})
aTit = li.find("a", {"class":"link"})
href = aTit['href']
return {"name":alt, "price":priceReload.text.replace(",", ""), "link":href}
<참고>
1. 예외처리 -기본 흐름
2. AttributeError: 'NoneType' object has no attribute 'get_text' (공공 데이터 - 미세먼지 - 크롤링) 에러 질문 드립니다.
'CAE > Enjoy Programming' 카테고리의 다른 글
네이버쇼핑 크롤링 (0) | 2019.12.27 |
---|---|
[Python] ImportError: DLL load failed: 지정된 모듈을 찾을 수 없습니다. (0) | 2019.08.08 |
클립보드 구글번역 프로그램 ClipToGT (0) | 2017.12.12 |
MATLAB에서 load, importdata, textscan의 차이 및 활용 (1) | 2017.11.29 |
[Trouble Shooting] 첨자 인덱스는 실수형 양의 정수(복소수형 정수가 아님)이거나 논리형이어야 합니다 (1) | 2017.11.29 |