Post

반응형

soup.select: select, select_one 함수.

soup.select('div') #div 태그만 찾는다
soup.select('.item_class') item_class라는 class만 찾는다 
soup.select('#item_list') item_list라는 id만 찾는다

soup:find: find는 계속해서 태그에 태그를 연결시키며 찾아들어가야함. 사용법이 좀 어려움

그래서 select를 쓰기로 결정

그런데 내가 원하는 아이템에 접근해서 정보를 가져오려고 했는데 아래와 같은 에러가 뜬다

 'NavigableString' object has no attribute 'select_one'

이건 그냥 내가 원하는 걸 못찾았다는 소리. 그래서 익숙한 find를 선택...

근데 또 에러 발생ㅠㅠ

 slice indices must be integers or None or have an __index__ method

숫자관련된 문제라는데 난 숫자 관련된게 없는데? for문 결과로 나온 item type확인

print(type(item))

결과는

반응형

<class 'bs4.element.NavigableString'>
<class 'bs4.element.Tag'>

이전에 잘만 내가 원하는 정보 가져온 애도 type확인

<class 'bs4.BeautifulSoup'>

애는 BeautifulSoup임... 음...뭔가 다르다....

내가 select_one해서 나온 결과물을 for문을 돌려서 태그로 찾으려는데 왜 찾질 못해 ㅠㅠㅠㅠ

 'NavigableString' object has no attribute 'select_one'

자꼬 이 에러 뜸.....

애초에 select_one으로 나오는 return 타입이 뭘까? NavigbleString?

아 찾았다 애초에 정보가 안들어가 있는 list도 있었음. 나는 리스트만 빼왔으니까 총 3개겠지 했지만 사실 내 눈에 안보이는 리스트까지 8개쯤 됨. 찾는 클래스가 없을 때 예외처리를 해줘야함.

아무튼 예외처리해주니 들여쓰기 잘해주라는 에러도 만나고(잘되어있는데??? 뭔가 이상한 거겠지ㅠㅠ??)

 expected an indented block after 'except' statement on line 29

exception 예외처리에서 print를 주석처리해서 그런거였음!

아무튼 크롤링 성공!

(로그인 안하는 사이트라서 soup로 쉽게 된 듯. 만약 동적 사이트나 로그인 사이트를 크롤링하고 싶다면

Scrapy, Selenium를 찾아봐야할 것 같다)

반응형
▲ top