[파이썬] 파이썬으로 웹 스크래퍼 만들기, Part 2 정보 추출 Extracting 2

미음제

·

2021. 2. 9. 21:57

파이썬으로 웹 스크래퍼 만들기

 

Part 1 이론

Part 2 파이썬으로 웹 스크래퍼 만들기

Part 3 Django를 사용하기 위해 알면 좋은 것

 

파이썬으로 웹 스크래퍼 만들기는 위와 같은

3개의 Part로 나누어 진행한다.

 

이 전 글 보기

2021/02/04 - [Developer/Python] - [파이썬] 파이썬으로 웹 스크래퍼 만들기, Part 2 정보 추출 Extracting


Part 2 파이썬으로 웹 스크래퍼 만들기

 

Beautiful Soup을 통해 Text만 가져오는 방법

 

soup.title.string을 사용

 

links = pagination.find_all('a')
spans = []

for link in links:
    spans.append(link.find("span"))

이전의

page는 link로 변경

pages는 links로 변경

 

 

link.find("span").string

span의 text만 가져온다는 것이다.

결과로 페이지 번호 2가 출력된다.

span의 string이 아니라

anchor자체에서

string을 가져오면?

pages.append(link.string)

같은 결과 출력

why?

anchor안의 요소가 하나뿐이고,

string이라면

Beautiful Soup이 string을

알아서 찾아준다.

 

아래의 코드가 훨씬 간단하다.

 

그러나 여기까지의 과정은

페이지 번호를

String으로 가져온 것이다.

Not Integer

 

그래서 String을

Integer로 바꿔주어야 한다.

(나중에 이 요소가 페이지를 요청하기 위해 사용됨)

(integer로 필히 바꿔주어야 함)

 

pages = []

for link in links:
    pages.append(int(link.string))

pages = pages[0:-1]
print(pages)

 

link.string을 통해 가져온

string을

형 변환을 통해 integer로 바꾸어 준다.

int로 바꾸는 함수는

int()

 

그러나 에러가 발생한다.

형변환을 위해서는 반드시 string이어야 함

형변환을 위한

link.string이 string이 아닌 케이스가 있다.

다음, next 버튼

 

다음 버튼이 integer로 변환되지 않아

for문을 수정해주고

pages 배열의 갱신을 삭제해 준다.

 

for link in links[:-1]:
    pages.append(int(link.string))
    
 #아래 부분 삭제
 pages = pages[0:-1]

for문의 범위를 조정해 준 것이다.

for문을 반복하는 과정에서

마지막 '다음'버튼이 들어가지 않게 수정했고

 

더 이상 배열에서 마지막 요소를 

삭제할 필요가 없어졌다

(for문에서 '다음'이 들어가지 않기 때문)

 


여기까지가

pagination의 anchor에서

page 번호를 찾은 것이고

찾아낸 page 번호에서 가장 큰 수가

무엇인지 찾아야 한다.

#가장 큰 수를 찾아내는 방법
print(pages[-1])

for문을 통해 '다음'버튼을 제외한 

anchor의 page 번호를

integer 형식으로 변환해

pages 배열에 집어넣었고,

배열의 마지막 요소가

pagination에서 찾은

page 번호 중 가장 큰 수가 된다.

 

다음 포스트 내용?

페이지를 계속 요청하는 방법

 

 

 

반응형