큐스터디라는 사이트에서 로그인한 상태에서의 전공임용수학 과목의 가격을 크롤링해보자
우선 사이트에서 개발자 도구를 열어 Network에서 로그인을 위해 post한 값을 찾는다.
내가 입력한 id, pw 값과 주소가 나타난다. (보라색)
import requests # requests 패키지를 불러주고
url = 'https://qstudy.kr/module/login/loginProc.php'
data = {'stw_top_id' : 나의 아이디, 'stw_top_pw' : 나의 비밀번호}
url 주소는 로그인 후 나타나는 Network의 hearders에서 General 부분에 Requests URL을 보면 확인할 수 있다.
이제 여기서부터가 중요함. 우리는 전에 url에서 로그인할 때 requests.post()함수를 사용했다. 하지만 이제는 그럴 수 없다. 로그인 된 환경에서 get요청을 해야하기 때문이다.
s = requests.Session()
s 라는 객체에 세션을 객체화해준다. ( 세션에 대한 개념은 나중에 다루도록 하자. 그냥 일단 외워두자 세션에 객체화..세션에 객체화)
resp = s.post(url, data = data)
세션에 로그인을 post해준 것을 response에 객체화해준다.
그럼 resp는 로그인한 세션을 의미하게 될 것이다.
그럼 이 세션을 가지고 get함수를 사용해 가격 정보 페이지를 들어가보자.
class_price_page = 'https://qstudy.kr/?stw=208'
가격정보가 있는 페이지이다.
resp_price = s.get(class_price_page)
resp.text
가격정보가 있는 페이지의 html 문서가 나타났다. 여기서 가격정보가 있는 tag, class를 찾아야 할 것이다.
가격정보는 span tag에 p_price class에 있음을 확인할 수 있다.
from bs4 import BeautifulSoup # 우선 BeautifulSoup을 불러주고,
soup = BeautifulSoup(resp.text) # soup객체에 resp.text를 BeautifulSoup으로 저장해준다.
soup
soup을 출력해보자.
BeautifulSoup 형식의 html이 보인다. 훨씬 보기 편하다.
여기서 가격은 span 태그에 p_price class에 있었기 때문에
soup.select('span.p_price')
soup.find('span', class_ = 'p_price')
select 함수는 리스트로 값을 출력하고 find함수는 string형식으로 출력해낸다.
그럼 여기서 가격이 적혀있는 텍스트만을 출력해보자.
price_ = soup.select('span.p_price')
price_[0]
price_[0].text
price_[0].get_text()
price_ = soup.find('span',class_ = 'p_price')
price_.text
'python > data crawling' 카테고리의 다른 글
7. selenium 모듈 (2) - 다음뉴스 웹사이트 크롤링 (0) | 2023.02.15 |
---|---|
6. selenium 모듈 (1) (0) | 2023.02.14 |
정규표현식으로 tag 찾기 & 정규표현식 정리 (0) | 2023.02.14 |
5. CSS selector를 이용하여 tag 찾기 (0) | 2023.02.14 |
4. beautifulsoup 모듈 (0) | 2023.02.14 |