from os import link
import requests
from bs4 import BeautifulSoup
indeed = "https://www.indeed.com/jobs?q=python&limit=50&filter=0"
indeed_result = requests.get(indeed)
indeed_soup = BeautifulSoup(indeed_result.text,"html.parser")
#print(indeed_soup) = bs 를 통해 data extracting
pagination = indeed_soup.find("ul",{"class":"pagination-list"})
#print(pagination) = ul 태그에 속한 모든 pagination-list class 를 호출
links = pagination.find_all('a')
#print(pages) = ul 안의 a 태그 주소를 모두 찾는다.
max_page = 0
#max_page 최종 페이지의 갯수가 파악이 안되니 초기화 해준다.
pages = []
for link in links[:-1]:
pages.append(int(link.string))
*link = li 중 .string 문자를 int화 하고 배열안에 추가한다.(즉 텍스트만 추출하고 그것을 숫자로 변형)
pages.append(link.find("span").string)
#links = links[1:-1]
#:-1은 마지막껄 제외하고 배열을 가져온다.
#pages.append(link.string) span 이 아닌 links 의 a 태그를 가져올 경우 (string 변환)
#span 안의 값을 string 으로 변환
max_page = pages[-1]
#[-1]은 마지막 위치의 배열 요소를 나타냄
print(pages)
print(max_page)
#print(pages) pages=[] 안의 모든 배열 중 마지막 -1 요소를 제외하고 가져옴
#print(max_page) 새로 할당된 -1의 마지막 배열 요소를 반환함
#pages = pages[:-1]
#23번째줄 == int(link.string) = 문자열화 된 숫자값을 숫자로 변환시켜주는데 ,
#pages = pages[:-1] 0부터 끝페이지까지 훑어보는데 우리가 찾는 pagination 에는 숫자뿐만이 아닌 NEXT (다음) 버튼도 포함되어있기에 오류를 발생한다. (문자열 그자체는 숫자로 변환 불가함 )
#그럼으로 위에 for 문에서 range의 범위 자체를 미리 정해둔다 links[:-1] (a태그가 포함된 ul 태그를 반복해서 도는데 범위 자체는 숫자이니 위와 같은
#TypeError: int() argument must be a string, a bytes-like object or a real number, not 'NoneType'가 발생되지않도록 미연에 방지 가능하다)
#print(pages) = [2, 3, 4, 5] 배열안에 숫자값이 담겼다. 즉 페이지 번호
#max_page = pages[-1] 배열 마지막 -1 이 가장 끝 번호이니 이것을 max_page 변수에 담아준다.
#즉 우리는 여기서 최종 페이지의 갯수를 반복문을 통해 알 수 있었고(5), 그만큼 의 갯수에 대한 5페이지 각각의 request를 요청해야된다.
문제점:https://www.indeed.com/jobs?q=python&limit=50
링크에서 전체 페이지 수 20 번째 까지 scrap을 해와야 되는데, 현재 2,3,4,5 만 긁어와지는 문제가 있음.
UI 변경 때문이라고 하지만, 어떻게 해결해 보고 싶긴한데, 현재로써는 잘 모르겠음...
참조해본 링크 : https://nomadcoders.co/python-for-beginners/lectures/121/comments/40978
(break 문에서 오류나서 실패)
시도: https://www.indeed.com/jobs?q=python&limit=50&start=99999&vjk=63be46bc13551cb3
start 지점을 9999로 마지막 페이지부터 긁어오려고했는데, 결국엔 마지막 페이지 20번째만 긁어와져서 이것도 실패
결국 20번 까지 전부다 scrap 떠오진 못했지만 5번째 까지 떠온걸로 어떻게든 해보자는 것..