.string 이용하여 문서에서 string 추출 가능 (BeautifulSoup)
예시)
soup.title.string
페이지에 있는 문자열만 가져오기위해 .string 이용
원하는 정보의 위치
<div class="pagination"> <a> <span class="pn"> n </span> </a> </div>
1 ) list.append(page_i.find('span').string)
import requests
from bs4 import BeautifulSoup
r=requests.get("https://kr.indeed.com/jobs?q=python&l=")
soup=BeautifulSoup(r.text,"html.parser")
pagination = soup.find('div',{'class':'pagination'})
page_a = pagination.find_all('a')
list=[]
for page_i in page_a:
list.append(page_i.find('span').string)
print(list[-1]) // ['2', '3', '4', '5']
2) .string 이용하여 출력
import requests
from bs4 import BeautifulSoup
r=requests.get("https://kr.indeed.com/jobs?q=python&l=")
soup=BeautifulSoup(r.text,"html.parser")
pagination = soup.find('div',{'class':'pagination'})
page_span = pagination.find_all('span',{'class':'pn'})
list=[]
for page_num in page_span:
list.append(page_num.string)
print(list[:-1]) // ['2', '3', '4', '5']
import requests
from bs4 import BeautifulSoup
r=requests.get("https://kr.indeed.com/jobs?q=python&l=")
soup=BeautifulSoup(r.text,"html.parser")
pagination = soup.find('div',{'class':'pagination'})
page_a = pagination.find_all('a')
list=[]
for page_i in page_a:
list.append(page_i.string)
print(list[:-1]) // ['2', '3', '4', '5']
span 태그에서 찾으나 a태그에서 찾으나 결과 동일
int( )함수를 이용하여 변환해준다
list=[]
for page_i in page_a:
list.append(int(page_i.string))
print(list[:-1]) // error
error 이유 : 위의 결과 중 '다음'이라는 문자가 있어서 이 문자는 int로 바꿀 수 없기 때문
따라서 list로 가져올 때 '다음'이라는 문자를 빼고 가져오기
list=[]
for page_i in page_a[:-1] :
list.append(int(page_i.string))
print(list)
위와 같이 가져옴 위의 예시에서 list에서 [:-1]안해도됨 (이미 page_a[:-1] 로 제거되어서)
맨 마지막 페이지가 몇 페이지인지만 추출하고 싶어서
list[-1]로 마지막 숫자만 추출
list=[]
for page_i in page_a[:-1] :
list.append(int(page_i.string))
max_page=list[-1] # 마지막 숫자만 추출하고 이를 max_page로 지정
# print(list[-1]) // 5
한 페이지의 job 정보 10개씩 있음
현재 출력한 페이지(1 페이지)의 url --> https://kr.indeed.com/jobs?q=python&l=
2페이지 --> https://kr.indeed.com/jobs?q=python&start=10
5페이지 --> https://kr.indeed.com/jobs?q=python&start=40
위의 url을 보면 페이지가 넘어갈 때 마다 start=n이 추가됨
list=[]
for page_i in page_a[:-1] :
list.append(int(page_i.string))
max_page=list[-1]
# print(range(max_page)) // range(0,5)
# range(max_page) 이용하여 리스트의 마지막 페이지를 범위로 만듬
위의 range를 차례로 출력하기
list=[]
for page_i in page_a[:-1] :
list.append(int(page_i.string))
max_page=list[-1]
for n in range(max_page)
print(n) //
0
1
2
3
4
다음과 같음
페이지 | n | url |
---|---|---|
1 페이지 | n=0 | start=0 |
2 페이지 | n=1 | start=10 |
... | ... | ... |
5 페이지 | n=4 | start=40 |
각 페이지의 url 끝부분 start=n*10이 나오도록 출력
list=[]
for page_i in page_a[:-1] :
list.append(int(page_i.string))
max_page=list[-1]
for n in range(max_page)
print(f'start={n*10}')
//
start=0
start=10
start=20
start=30
start=40
function을 담을 모듈인 파이썬 파일을 만들고 그 안에 위의 과정을 복사 --> 붙여넣기 하기
새로운 파일이름은 홈페이지 이름을 따서 indeed.py로 만듬
아래의 내용을 복사 --> 붙여넣기하여 indeed.py를 만들기
import requests
from bs4 import BeautifulSoup
r=requests.get("https://kr.indeed.com/jobs?q=python&l=")
soup=BeautifulSoup(r.text,"html.parser")
pagination = soup.find('div',{'class':'pagination'})
page_a = pagination.find_all('a')
list=[]
for page_i in page_a[:-1] :
list.append(int(page_i.string))
max_page=list[-1]
위의 내용을 아래와 같이 함수로 정의
import requests
from bs4 import BeautifulSoup
def indeed_pages():
r=requests.get("https://kr.indeed.com/jobs?q=python&l=")
soup=BeautifulSoup(r.text,"html.parser")
pagination = soup.find('div',{'class':'pagination'})
page_a = pagination.find_all('a')
list=[]
for page_i in page_a[:-1] :
list.append(int(page_i.string))
max_page=list[-1]
return max_page
함수 정의 후 마지막에 return max_page로 결과값 반환하기
url이 바뀌어도 함수가 작동하도록 url 위치를 변경
import requests
from bs4 import BeautifulSoup
indeed_url="https://kr.indeed.com/jobs?q=python&l="
def indeed_pages():
r=requests.get(indeed_url) # url을 함수 밖에서 가져올 수 있도록 지정
soup=BeautifulSoup(r.text,"html.parser")
pagination = soup.find('div',{'class':'pagination'})
page_a = pagination.find_all('a')
list=[]
for page_i in page_a[:-1] :
list.append(int(page_i.string))
max_page=list[-1]
return max_page
위에서 만든 indeed 모듈과 indeed_pages 함수를 다른 파일에 적용
from indeed import indeed_pages
max_pages=indeed_pages()
print(max_pages)
위의 먼저 만들어 두었던 indeed.py 모듈에 두번째 함수를 정의
import requests
from bs4 import BeautifulSoup
limit=10
def start(last_page):
for n in range(last_page):
print(f'start={n*limit}')
from indeed import indeed_pages, start
max_pages=indeed_pages()
start(max_pages)
위의 과정으로 추가된 url~&start=n을 통하여 페이지를 요청하기
function-B 코드의 print부분을 requests로 변경
import requests
from bs4 import BeautifulSoup
indeed_url = "https://kr.indeed.com/jobs?q=python&l="
limit=10
def start(last_page):
for n in range(last_page):
requests.get(f'{indeed_url}&start={n*limit}')
코드 확인하기
예시)
import requests
requests.get(URL)
response.status_code
response.text
url을 요청하면 그 결과를 응답
.status_code : HTTP 결과로 응답
.text : text로 페이지 출력
ref) https://dgkim5360.tistory.com/entry/python-requests
위의 코드를 .status_code를 이용하여 동작하는지 확인해보기
import requests
from bs4 import BeautifulSoup
indeed_url = "https://kr.indeed.com/jobs?q=python&l="
limit=10
def start(last_page):
for n in range(last_page):
result=requests.get(f'{indeed_url}&start={n*limit}')
print(result.status_code)
결과로 200(OK)가 원하는 갯수대로 나오면 성공
상당히 자세하네요