[Python] 파이썬 크롤링 beautifulSoup 결과 정렬(sorted) 방법
파이썬으로 크롤링한 결과를 정렬하고자하였다. 그리하여 리스트 정렬시 사용하는 sorted()함수를 사용하여보았다.
그랬더니 다음과 같은 오류가 발생되었다.
AttributeError: ResultSet object has no attribute ‘sorted’. You’re probably treating a list of elements like a single element. Did you call find_all() when you meant to call find()?
Traceback (most recent call last):
File "C:\python\Workspace\main.py", line 66, in <module>
parsing_game_info(div_list)
File "C:\python\Workspace\main.py", line 29, in parsing_game_info
item_list.sorted()
File "C:\Users\ilike\AppData\Local\Programs\Python\Python39\lib\site-packages\bs4\element.py", line 2173, in __getattr__
raise AttributeError(
AttributeError: ResultSet object has no attribute 'sorted'. You're probably treating a list of elements like a single element. Did you call find_all() when you meant to call find()?
beautifulSoup 라이브러리를 사용한 결과값은 리스트가 아닌 ResultSet 오브젝트에 담긴다는 사실을 알게되었다.
그리고 오류 내용과 같이 ResultSet 오브젝트에는 sorted() 속성값이 존재하지 않는다.
sort()속성은 사용할 수 있다. 하지만 html 태그와 태그사이에서는 소팅할 수 없고 아래와 같은 오류가 발생한다.
Traceback (most recent call last):
File "C:\python\Workspace\main.py", line 68, in <module>
parsing_game_info(div_list)
File "C:\python\Workspace\main.py", line 29, in parsing_game_info
item_list.sort()
TypeError: '<' not supported between instances of 'Tag' and 'Tag'
아래와 같이 사용하면 정렬할 수 있는데, ResultSet 결과에 태그가 있어서 정렬되지않는다.
sorted(item_list, key=lambda elem: elem.text)
# reverse 변수는 부울형으로 True 이면 내림차순
sorted(item_list, key=lambda student: student[2], reverse=True)
태그가 없다면 정렬 가능하다.