반응형

라이브러리 가져오기 / html 가져오기
- ch02.py 파일을 만든 후 다음을 입력하여 라이브러리를 가져옵니다.
import requests
from bs4 import BeautifulSoup
- requests는 사람 편의를 생각하여 http요청을 하는 라이브러리입니다.
- 우선 naver.com으로 해보겠습니다. 먼저 상태코드를 확인합니다.
url1= "https://www.naver.com"
# 요청 url 변수에 담긴 url의 html 문서를 출력한다.
req = requests.get(url1)
print(req.status_code)
- '상태코드 200' 은 서버가 요청을 제대로 처리했다는 의미입니다. 그럼 계속 이어서 하겠습니다.
- 다음 코드는 웹 페이지의 html을 모두 불러오는 것입니다. 이는 우리가 웹 페이지에서 마우스 우클릭-페이지 소스코드 보기에서 확인할 수 있는 내용입니다.
print(req.text)


뉴스 타이틀 가져오기
네이버 뉴스
다양한 기사 정보를 제공합니다.
news.naver.com
- 이 사이트의 뉴스 타이틀을 가져와보겠습니다.

- 먼저 referer와 user-agent를 설정합니다. 이것은 [웹 페이지 마우스 우클릭- 검사 -네트워크- 파일 클릭 -requests headers 아래]에서 확인할 수 있습니다. referer는 해당 사이트 오기 직전의 사이트, user-agent는 브라우저 종류를 의미합니다.

def main():
custom_header = {
'referer' : 'https://www.naver.com/',
'user-agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36'
}
url = "https://news.naver.com/main/list.nhn?mode=LPOD&mid=sec&sid1=001&sid2=140&oid=001&isYeonhapFlash=Y"
req = requests.get(url, headers = custom_header)
# print(req.status_code)
# print(req.text)
if __name__ == "__main__":
main()
- BeautifulSoup 객체를 초기화 합니다.
soup = BeautifulSoup(req.text, "html.parser")
print(soup)
- 정상적으로 soup이 출력이 된다면 새로운 함수를 써서 제목을 불러오도록 합니다.
- 제목은 <div class="list_body>아래에 있습니다.

def crawler(soup): # 아래 soup 출력하면 지저분하니까 정리
# print(soup) 여기까진 잘 되는군. 주석처리 고
div = soup.find("div", class_="list_body")
print(div)
result = []
return result
def main():
# 요청 url 변수에 담긴 url의 html 문서를 출력한다.
custom_header = {
'referer' : 'https://www.naver.com/',
'user-agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
}
url = "https://news.naver.com/main/list.nhn?mode=LPOD&mid=sec&sid1=001&sid2=140&oid=001&isYeonhapFlash=Y"
req = requests.get(url, headers = custom_header)
# print(req.status_code)
soup = BeautifulSoup(req.text, "html.parser")
result = crawler(soup)
print(result)
- 위처럼 입력하면 해당 <div> 안쪽 html이 모두 출력됩니다.

- 아래와 같이 result에 대한 코드를 입력하고 출력을 확인합니다.
def crawler(soup):
div = soup.find("div", class_="list_body")
result = []
for a in div.find_all("a"): # find_all의 변환값 형태는 리스트다. 그래서 반복문 가능
print(a.get_text())
return result
- 출력물을 list에 넣으면 다음과 같습니다.
def crawler(soup):
div = soup.find("div", class_="list_body")
result = []
for a in div.find_all("a"): # find_all의 변환값 형태는 리스트다. 그래서 반복문 가능
result.append(a.get_text())
return result
def main():
# 요청 url 변수에 담긴 url의 html 문서를 출력한다.
custom_header = {
'referer' : 'https://www.naver.com/',
'user-agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
}
url = "https://news.naver.com/main/list.nhn?mode=LPOD&mid=sec&sid1=001&sid2=140&oid=001&isYeonhapFlash=Y"
req = requests.get(url, headers = custom_header)
# print(req.status_code)
soup = BeautifulSoup(req.text, "html.parser")
result = crawler(soup)
print(result)
if __name__ == "__main__":
main()

지금까지 수고 많으셨습니다.
크롤링에 대해 조금씩 가까워지고 있나요?
다음 포스팅에서도 연습해보며 친해져보아요!
감사합니다!
'Python > Crawling' 카테고리의 다른 글
| [Crawling]_서울열린데이터광장에서 API로 데이터 수집하기 (0) | 2023.08.15 |
|---|---|
| [Crawling]_Selenium 설치 확인하기 (0) | 2023.08.10 |
| [Crawling]_API를 이용하여 웹에서 정보 가져오기 (0) | 2023.08.07 |
| [BeautifulSoup]_'아름다운 스프' 아니고 data를 가져오는 것? - find() (0) | 2023.08.06 |
| [Crawling]_웹 페이지의 데이터를 가지고 올 수 있을까? (0) | 2023.08.04 |