상세 컨텐츠

본문 제목

파이썬 크롤링 기초 1 - select, select_one

카테고리 없음

2020. 7. 28. 15:42

본문

코딩은 알면 알수록 재미있다. 크롤링의 가장 기본단계를 알아보겠다.

 

1. requests 와 BeautifulSoup를 import 를 한다.

import requests
from bs4 import BeautifulSoup

2. 'https://housing.seoul.go.kr/site/main/board/faq_mr#n' 이 페이지를 크롤링해보겠다.

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"}

url = 'https://housing.seoul.go.kr/site/main/board/faq_mr#n'

result = requests.get(url, headers=headers)
soup = BeautifulSoup(result.content, 'html.parser')
print(soup)

Print(soup) 를 해보자 

<!-- header -->
<!DOCTYPE html>

<html lang="ko">
<head>
<title>FAQ | 청년월세지원 | 청년·신혼부부 지원 | 주거 정책 | FAQ(청년월세지원) | 서울주거포털</title>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
<meta content="IE=edge" http-equiv="X-UA-Compatible"/>
<meta content="width=device-width, user-scalable=yes" name="viewport"/>
<meta content="" name="subject"/>
<meta content="" name="keywords"/>
<meta content="" name="author"/>
<meta content="copyrights Seoul Metropolitan Govement all rights reserved" name="copyright"/>
<!-- SEO -->
<meta content="website" property="og:type"/>

 

파싱 결과물 

 

지금 필요한건 Q 와 A 를 크롤링하는 것. 크롤링 하는 방법은 여러가지가 있는데 이번에는 select를 사용해서 해보겠다.

 

3. select와 select_one 사용

1개의 Q와 A를 다 묶는 div를 찾는다 div.qna-list > ul > li  인 것을 알 수 있다. select 함수를 써서 해당 내용을 가져오자

qa = soup.select('div.qna-list > ul > li')

select로 하면 해당 내용이 리스트로 묵여서 나온다. qa = [ a, b ,c, d ...] 이런식으로 나오는 셈

 

이젠 이 리스트의 항목을 가져와야겠다.

Q에 해당하는 것은 'div.qna-q > p' 이고 A에 해당하는 것은 'div.qna-a>p'이다.

 

for 함수를 써서 하나씩 가져오기로 하자.

for i in qa:
    q = i.select_one('div.qna-q > p')
    a = i.select_one('div.qna-a > a')
    print(q,a)

실행화면

<p>42. [급여 지급] 청년월세지원 급여를 받다가 중지될 수 있나요 ?</p> <p>
									
									
										◦ 청년수당을 지급 받거나 공공 주거사업 관련 유사사업에 중복 참여하고 있는 것으로 확인될 경우, 서울시외 지역으로 전출 등 자격요건이 되지 않을 시에는 지원 중지 및 지원금이 환급조치 될 수 있습니다.
									
								</p>
<p>41. [급여 지급] 사업신청시 필수 제출서류(3종)외 추가로 제출해야 하는 것이 있나요?</p> <p>
									
									
										◦ 신청서류 검토 중 별도의 확인이 필요한 경우 추가 서류를 요청할 수 있습니다.<br/> - 임차보증금 일반금융대출이 있는 경우 금융거래증명서<br/> - 서울외 타지역에 건물이 있는 경우 ‘세목별과세증명서’

 

실행하면 줄이 엉망이다 <p> 같은 쓸모없는 코드와 줄간격을 없애보자 

 

text 는 코드안의 텍스트만 빼는 것이고 strip()은 텍스트 양옆의 공백을 제거해준다.

for i in qa:
    q = i.select_one('div.qna-q > p').text.strip()
    a = i.select_one('div.qna-a > p').text.strip()
    print(q,a)
42. [급여 지급] 청년월세지원 급여를 받다가 중지될 수 있나요 ? ◦ 청년수당을 지급 받거나 공공 주거사업 관련 유사사업에 중복 참여하고 있는 것으로 확인될 경우, 서울시외 지역으로 전출 등 자격요건이 되지 않을 시에는 지원 중지 및 지원금이 환급조치 될 수 있습니다.
41. [급여 지급] 사업신청시 필수 제출서류(3종)외 추가로 제출해야 하는 것이 있나요? ◦ 신청서류 검토 중 별도의 확인이 필요한 경우 추가 서류를 요청할 수 있습니다. - 임차보증금 일반금융대출이 있는 경우 금융거래증명서 - 서울외 타지역에 건물이 있는 경우 ‘세목별과세증명서’
...

이렇게 깔끔하게 나오는 것을 볼 수 있다. 

 

select는 해당 내용이 리스트로 묶여 나오는 것을 알 수 있고, select_one은 리스트 안의 값을 추출한다고 보면된다.

댓글 영역