주제에 대한 기사를 찾고 있습니까 “파이썬 웹 크롤링“? 웹사이트에서 이 주제에 대한 전체 정보를 제공합니다 c1.castu.org 탐색에서: 새로운 상위 35 가지 팁 업데이트. 바로 아래에서 이 주제에 대한 자세한 답변을 찾을 수 있습니다. 찾고 있는 주제를 더 잘 이해하려면 끝까지 읽으십시오. 더 많은 관련 검색어: 파이썬 웹 크롤링 파이썬 웹크롤링 셀레니움, 파이썬 크롤링 예제, 파이썬 크롤링 하는 법, 파이썬 크롤링 코드, 파이썬 웹 크롤링 패키지, 파이썬 웹 스크래핑, 파이썬 크롤링 BeautifulSoup, 파이썬 웹크롤링 오픈소스
Table of Contents
BeautifulSoup와 requests로 웹 파싱해보기 – 파이썬 실습
$ python example_crawling_gabia_library2.py 1 번째 게시글: 언택트 시대의 기업 메일이 중요한 이유, https://library.gabia.com/contents/groupware/9200/ 2 번째 게시글: 포스트 코로나 시대의 클라우드, https://library.gabia.com/contents/infrahosting/9177/ 3 번째 게시글: 클라우드 플랫폼과 마이크로서비스, https://library.gabia.com/contents/infrahosting/9154/ 4 번째 게시글: 퍼블릭 클라우드, 프라이빗 클라우드, 하이브리드 클라우드, https://library.gabia.com/contents/infrahosting/9147/ 5 번째 게시글: 클라우드 마이그레이션 전략 알아보기, https://library.gabia.com/contents/infrahosting/7705/ 6 번째 게시글: 클라우드 vs 웹호스팅 vs 서버호스팅 구분, https://library.gabia.com/contents/infrahosting/9118/ 7 번째 게시글: 마이데이터란 무엇인가, https://library.gabia.com/contents/infrahosting/9142/ 8 번째 게시글: 클라우드에 저장된 개인정보, 어떤 문제가 있을까, https://library.gabia.com/contents/infrahosting/9136/ 9 번째 게시글: 클라우드 컴퓨팅의 종류, SaaS란?, https://library.gabia.com/contents/infrahosting/9123/ …
import requests from bs4 import BeautifulSoup as bs import pandas as pd page = requests.get(“https://library.gabia.com/”) soup = bs(page.text, “html.parser”) elements = soup.select(‘div.esg-entry-content a.eg-grant-element-0’) titles = [] links = [] for index, element in enumerate(elements, 1): titles.append(element.text) links.append(element.attrs[‘href’]) df = pd.DataFrame() df[‘titles’] = titles df[‘links’] = links df.to_excel(‘./library_gabia.xlsx’, sheet_name=’Sheet1′)
$ python parser.py 1 번째 게시글의 제목 : 언택트 시대의 기업 메일이 중요한 이유 2 번째 게시글의 제목 : 포스트 코로나 시대의 클라우드 3 번째 게시글의 제목 : 클라우드 플랫폼과 마이크로서비스 4 번째 게시글의 제목 : 퍼블릭 클라우드, 프라이빗 클라우드, 하이브리드 클라우드 5 번째 게시글의 제목 : 클라우드 마이그레이션 전략 알아보기 6 번째 게시글의 제목 : 클라우드 vs 웹호스팅 vs 서버호스팅 구분 7 번째 게시글의 제목 : 마이데이터란 무엇인가 8 번째 게시글의 제목 : 클라우드에 저장된 개인정보, 어떤 문제가 있을까 9 번째 게시글의 제목 : 클라우드 컴퓨팅의 종류, SaaS란? …
크롤링은 웹 인덱싱을 위해 WWW를 체계적으로 탐색해나가는 것을 의미합니다. 크롤러가 하는 행위(WWW를 탐색해나가는 행위 등)를 바로 ‘크롤링’ 이라고 합니다. 파싱 ( …
- Source: library.gabia.com
- Views: 8482
- Publish date: 51 minute ago
- Downloads: 62459
- Likes: 7843
- Dislikes: 7
- Title Website: BeautifulSoup와 requests로 웹 파싱해보기 – 파이썬 실습
- Description Website: 크롤링은 웹 인덱싱을 위해 WWW를 체계적으로 탐색해나가는 것을 의미합니다. 크롤러가 하는 행위(WWW를 탐색해나가는 행위 등)를 바로 ‘크롤링’ 이라고 합니다. 파싱 ( …
- Source: Youtube
- Views: 49017
- Date: 24 hours ago
- Download: 78919
- Likes: 2596
- Dislikes: 5
BeautifulSoup와 requests로 웹 파싱해보기 – 파이썬 실습
이번 글에서는 Python의 BeautifulSoup, requests 패키지를 이용하여, 가비아 라이브러리 홈페이지의 게시글들을 파싱하는 방법을 소개합니다.
들어가기 전
본문으로 들어가기 전, 먼저 크롤링(Crawling), 파싱(Parsing), 스크래핑(Scraping)에 대한 정의를 알아보겠습니다.
웹 크롤러 (Web crawler) ” A Web crawler, sometimes called a spider or spiderbot and often shortened to crawler, is an Internet bot that systematically browses the World Wide Web, typically for the purpose of Web indexing (web spidering). ” (출처: wikipedia)
크롤링은 웹 인덱싱을 위해 WWW를 체계적으로 탐색해나가는 것을 의미합니다. 크롤러가 하는 행위(WWW를 탐색해나가는 행위 등)를 바로 ‘크롤링’ 이라고 합니다.
파싱 (Parsing) ” Parsing, syntax analysis, or syntactic analysis is the process of analyzing a string of symbols, either in natural language, computer languages or data structures, conforming to the rules of a formal grammar. ” (출처: wikipedia)
웹 파싱은 웹 상의 자연어, 컴퓨터 언어 등의 일련의 문자열들을 분석하는 프로세스입니다.
웹 스크래핑 (Web scraping) ” Web scraping, web harvesting, or web data extraction is data scraping used for extracting data from websites. ” (출처: wikipedia)
웹 스크래핑은 다양한 웹사이트로부터 데이터를 추출하는 기술을 의미합니다.
정의를 살펴보면, 흔히 사용되는 용어 ‘크롤러’는 데이터 추출의 의미보다 웹 사이트를 탐색하고, 인덱싱 하는 것에 더 중점적인 의미를 갖고 있는 것 처럼 보입니다. 따라서 이번 글 에서는 ‘웹 크롤링’ 이라는 단어의 사용보다 ‘웹 파싱’ 이라는 단어를 사용하겠습니다. (각각의 용어에 대한 해석은 다를 수 있습니다.)
웹 파싱해보기
파이썬에서 가장 많이 사용되고 있는 패키지 BeautifulSoup, Requests를 사용하여 웹 사이트를 파싱해보겠습니다.
1. BeautifulSoup, Requests 패키지가 설치되었는지 확인합니다.
pip list
목록에 beautifulsoup4 , requests 패키지가 없다면 설치해줍니다.
pip install beautifulsoup4 pip install requests
BeautifulSoup: 웹 페이지의 정보를 쉽게 스크랩할 수 있도록 기능을 제공하는 라이브러리입니다.
Requests: HTTP 요청을 보낼 수 있도록 기능을 제공하는 라이브러리 입니다.
2. 파싱을 진행할 페이지를 분석합니다.
1. 가비아 라이브러리 홈페이지에 접속합니다.
2. 홈페이지에 접속하여 HTML 소스를 분석합니다.
크롬 브라우저 기준, F12 혹은 마우스 우클릭 > ‘검사’ 를 클릭하면 ‘개발자 도구 창’ 이 나타납니다.
가비아 라이브러리 메인 화면
가비아 라이브러리 메인 HTML 소스
HTML 소스를 살펴보면 게시글들의 제목, 링크, 날짜 등의 내용을 확인할 수 있습니다.
3. 파싱을 위해 파이썬 파일을 생성합니다.
vi parser.py
4. 파싱을 위한 코드를 작성하고 실행시킵니다.
4-1. 가비아 라이브러리 홈페이지에 존재하는 포스터들의 제목을 추출해봅니다.
import requests from bs4 import BeautifulSoup as bs page = requests.get(“https://library.gabia.com/”) soup = bs(page.text, “html.parser”) elements = soup.select(‘div.esg-entry-content a > span’) for index, element in enumerate(elements, 1): print(“{} 번째 게시글의 제목: {}”.format(index, element.text))
line 1 ~ 2: 필요한 라이브러리(requests, beautifulsoup)를 import 합니다.
line 4: requests 를 이용하여 ‘https://library.gabia.com’ 주소로 get 요청을 보내고 응답을 받습니다. 상태 코드와 HTML 내용을 응답받을 수 있습니다.
line 5: 응답받은 HTML 내용을 BeautifulSoup 클래스의 객체 형태로 생성/반환합니다. BeautifulSoup 객체를 통해 HTML 코드를 파싱하기 위한 여러 가지 기능을 사용할 수 있습니다. ( response.text 는 응답 받은 내용(HTML)을 Unicode 형태로 반환합니다.)
line 7: BeautifulSoup 가 제공하는 기능 중 CSS 셀렉터를 이용하여 원하는 정보를 찾을 수 있는 기능입니다. ( div.esg-entry-content a > span 은 esg-entry-content 클래스로 설정된 div 태그들의 하위에 존재하는 a 태그, 그 하위에 존재하는 span 태그를 의미합니다.) 이 셀렉터를 이용하면 가비아 라이브러리 홈페이지에 존재하는 포스터들의 제목을 추출할 수 있습니다.
아래와 같이 실행 결과를 확인할 수 있습니다.
$ python parser.py 1 번째 게시글의 제목 : 언택트 시대의 기업 메일이 중요한 이유 2 번째 게시글의 제목 : 포스트 코로나 시대의 클라우드 3 번째 게시글의 제목 : 클라우드 플랫폼과 마이크로서비스 4 번째 게시글의 제목 : 퍼블릭 클라우드, 프라이빗 클라우드, 하이브리드 클라우드 5 번째 게시글의 제목 : 클라우드 마이그레이션 전략 알아보기 6 번째 게시글의 제목 : 클라우드 vs 웹호스팅 vs 서버호스팅 구분 7 번째 게시글의 제목 : 마이데이터란 무엇인가 8 번째 게시글의 제목 : 클라우드에 저장된 개인정보, 어떤 문제가 있을까 9 번째 게시글의 제목 : 클라우드 컴퓨팅의 종류, SaaS란? …
4-2. 가비아 라이브러리 홈페이지에 존재하는 포스터들의 제목과 링크를 동시에 추출해봅니다.
import requests from bs4 import BeautifulSoup as bs page = requests.get(“https://library.gabia.com/”) soup = bs(page.text, “html.parser”) elements = soup.select(‘div.esg-entry-content a.eg-grant-element-0’) for index, element in enumerate(elements, 1): print(“{} 번째 게시글: {}, {}”.format(index, element.text, element.attrs[‘href’]))
line 7: esg-entry-content 클래스로 설정된 div 태그들의 하위에 존재하는 태그 중, eg-grant-element-0 클래스를 갖는 a 태그만을 추출합니다.
line 10: link.text 추출한 a 태그 안에 존재하는 text 내용을 추출합니다. link.attrs[‘href’] a 태그의 href 속성의 값을 추출합니다.
아래와 같이 실행 결과를 확인할 수 있습니다.
$ python example_crawling_gabia_library2.py 1 번째 게시글: 언택트 시대의 기업 메일이 중요한 이유, https://library.gabia.com/contents/groupware/9200/ 2 번째 게시글: 포스트 코로나 시대의 클라우드, https://library.gabia.com/contents/infrahosting/9177/ 3 번째 게시글: 클라우드 플랫폼과 마이크로서비스, https://library.gabia.com/contents/infrahosting/9154/ 4 번째 게시글: 퍼블릭 클라우드, 프라이빗 클라우드, 하이브리드 클라우드, https://library.gabia.com/contents/infrahosting/9147/ 5 번째 게시글: 클라우드 마이그레이션 전략 알아보기, https://library.gabia.com/contents/infrahosting/7705/ 6 번째 게시글: 클라우드 vs 웹호스팅 vs 서버호스팅 구분, https://library.gabia.com/contents/infrahosting/9118/ 7 번째 게시글: 마이데이터란 무엇인가, https://library.gabia.com/contents/infrahosting/9142/ 8 번째 게시글: 클라우드에 저장된 개인정보, 어떤 문제가 있을까, https://library.gabia.com/contents/infrahosting/9136/ 9 번째 게시글: 클라우드 컴퓨팅의 종류, SaaS란?, https://library.gabia.com/contents/infrahosting/9123/ …
5. 파싱한 데이터를 활용해봅니다.
이번엔 Pandas, openpyxl 패키지를 이용하여 파싱한 데이터를 엑셀 형태로 변환해보겠습니다.
5-1. Pandas, openpyxl 패키지가 설치되어 있는지 확인합니다.
pip show pandas pip show openpyxl
패키지가 설치되어 있지 않다면 설치해줍니다.
pip install pandas pip install openpyxl
Pandas: 데이터를 쉽게 분석하고 조작할 수 있는 파이썬의 라이브러리입니다.
openpyxl: 엑셀 파일을 읽고 작성할 수 있는 파이썬 라이브러리입니다.
5-2. 위에서 작성한 코드를 아래와 같이 수정합니다.
import requests from bs4 import BeautifulSoup as bs import pandas as pd page = requests.get(“https://library.gabia.com/”) soup = bs(page.text, “html.parser”) elements = soup.select(‘div.esg-entry-content a.eg-grant-element-0’) titles = [] links = [] for index, element in enumerate(elements, 1): titles.append(element.text) links.append(element.attrs[‘href’]) df = pd.DataFrame() df[‘titles’] = titles df[‘links’] = links df.to_excel(‘./library_gabia.xlsx’, sheet_name=’Sheet1′)
line 3: pandas 라이브러리를 import합니다.
line 1 ~ 14: 이전에 작성한 코드와 동일합니다. 다만, 이번에는 게시글의 제목, 링크를 출력하지 않고 각각의 배열에 값을 추가합니다.
line 17 ~ 19: titles 배열과 links 배열의 값으로 Pandas의 DataFrame 을 생성합니다.
line 21: DataFrame 의 to_excel() 함수를 이용하여 엑셀파일을 작성합니다.
아래와 같이 생성된 엑셀 파일을 확인할 수 있습니다.
생성된 엑셀 파일
지금까지 가비아 Python 호스팅 환경에서 가비아 라이브러리 홈페이지를 파싱하는 방법을 알아보았습니다.
가비아는 초보 개발자도 쉽게 호스팅 서비스를 이용할 수 있도록 최적화된 호스팅 환경을 제공합니다.
또한 CBT, OBT를 거쳐 검증된 컨테이너 기반의 환경에 Python 호스팅 서비스를 제공해 때문에 안정적이고, 믿을 수 있습니다.
가비아 Python 호스팅을 이용해 이번 포스팅과 같이 웹 파싱을 개발해 보시기 바랍니다.
파이썬 웹 크롤링(Web Crawling) 강좌 – 1. 웹페이지 긁어오기
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
프로젝트 꽃 https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EA%BD%83
9 thg 9, 2018 — 파이썬 웹 크롤링(Web Crawling) 강좌 – 1. 웹페이지 긁어오기 · 1. 웹 문서 전체 가져오기 · 2. 타이틀 가져오기 · 3. 모든 메타 데이터의 내용 가져오기 · 4 …
- Source: webnautes.tistory.com
- Views: 36296
- Publish date: 19 hours ago
- Downloads: 64262
- Likes: 5664
- Dislikes: 3
- Title Website: 파이썬 웹 크롤링(Web Crawling) 강좌 – 1. 웹페이지 긁어오기
- Description Website: 9 thg 9, 2018 — 파이썬 웹 크롤링(Web Crawling) 강좌 – 1. 웹페이지 긁어오기 · 1. 웹 문서 전체 가져오기 · 2. 타이틀 가져오기 · 3. 모든 메타 데이터의 내용 가져오기 · 4 …
파이썬 웹 크롤링 하기 – 너무 간단해서 민망합니다.
- Source: Youtube
- Views: 46086
- Date: 15 hours ago
- Download: 56710
- Likes: 5742
- Dislikes: 9
파이썬 웹 크롤링(Web Crawling) 강좌 – 1. 웹페이지 긁어오기
Beautiful Soup를 사용하여 간단한 웹 크롤러를 만드는 방법을 다루고 있습니다.
Python 3.6으로 코드를 작성하였습니다. 버전의 차이로 필요한 모듈이 달라질 수도 있습니다.
웹 크롤러(Web Crawler)는 웹문서, 이미지 등을 주기적으로 수집하여 자동으로 데이터베이스화하는 프로그램입니다. 웹 크롤러가 하는 작업을 웹 크롤링(Web Crawling)이라고 부릅니다.
보통 웹 크롤러를 사용하여 웹문서의 복사본을 생성합니다. 검색 엔진은 이렇게 생성된 데이터를 인덱싱하여 빠른 검색을 할 수 있도록 합니다.
웹 페이지의 내용을 가져오는 간단한 웹 크롤러를 만들어 보겠습니다.
시작하기 전에 requests와 beautifulsoup4 패키지를 설치해줘야 합니다.
pip install requests beautifulsoup4
1. 웹 문서 전체 가져오기
urlopen 함수를 사용하여 원하는 주소로부터 웹페이지를 가져온 후, BeautifulSoup 객체로 변환합니다.
BeautifulSoup 객체는 웹문서를 파싱한 상태입니다. 웹 문서가 태그 별로 분해되어 태그로 구성된 트리가 구성됩니다.
포함하는 태그가 부모가 되고 포함된 태그가 자식이 되어 트리를 구성하고 있습니다.
예를 들어 html 태그아래에 head와 body 태그가 존재하고 다시 head와 body 태그 아래에 하위 태그가 존재합니다.
파싱이란 일련의 문자열로 구성된 문서를 의미 있는 토큰(token)으로 분해하고 토큰으로 구성된 파스 트리(parse tree)를 만드는 것입니다.
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen( “http://www.naver.com” )
bsObject = BeautifulSoup(html, “html.parser” )
print (bsObject) # 웹 문서 전체가 출력됩니다.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2. 타이틀 가져오기
태그로 구성된 트리에서 title 태그만 출력합니다.
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen( “http://www.naver.com” )
bsObject = BeautifulSoup(html, “html.parser” )
print (bsObject.head.title)
NAVER 3. 모든 메타 데이터의 내용 가져오기
웹문서에서 메타 데이터만 찾아서 content 속성값을 가져옵니다.
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen( “https://www.python.org/about” )
bsObject = BeautifulSoup(html, “html.parser” )
for meta in bsObject.head.find_all( ‘meta’ ):
print (meta.get( ‘content’ ))
None
IE=edge
Python.org
The official home of the Python Programming Language
Python.org
yes
black
width=device-width, initial-scale=1.0
True
telephone=no
on
false
/static/metro-icon-144×144-precomposed.png
#3673a5
#3673a5
The official home of the Python Programming Language
Python programming language object oriented web free open source software license documentation download community
website
Python.org
Welcome to Python.org
The official home of the Python Programming Language
https://www.python.org/static/opengraph-icon-200×200.png
https://www.python.org/static/opengraph-icon-200×200.png
https://www.python.org/about/
..
..
4. 원하는 태그의 내용 가져오기
find를 사용하면 원하는 태그의 정보만 가져올 수 있습니다.
예를 들어 www.python.org/about 에서 다음 태그의 content 속성값을 가져오려면..
우선 웹문서에 있는 meta 태그 중 가져올 태그를 name 속성 값이 description인 것으로 한정합니다.
print (bsObject.head. find ( “meta” , { “name” : “description” }))
meta 태그의 content 내용을 가져옵니다.
print (bsObject.head. find ( “meta” , { “name” : “description” }). get ( ‘content’ ))
The official home of the Python Programming Language
전체 소스코드입니다.
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen( “https://www.python.org/about” )
bsObject = BeautifulSoup(html, “html.parser” )
print (bsObject.head. find ( “meta” , { “name” : “description” }).get( ‘content’ ))
5. 모든 링크의 텍스트와 주소 가져오기
a 태그로 둘러싸인 텍스트와 a 태그의 href 속성을 출력합니다.
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen( “https://www.naver.com” )
bsObject = BeautifulSoup(html, “html.parser” )
for link in bsObject.find_all( ‘a’ ):
print (link.text.strip(), link.get( ‘href’ ))
C:\Users\webnautes\PycharmProjects\Python_Project\venv\Scripts\python.exe C:/Users/webnautes/PycharmProjects/Python_Project/1.py
뉴스스탠드 바로가기 #news_cast
주제별캐스트 바로가기 #themecast
타임스퀘어 바로가기 #time_square
쇼핑캐스트 바로가기 #shp_cst
로그인 바로가기 #account
네이버 /
네이버를 시작페이지로 http://help.naver.com/support/alias/contents2/naverhome/naverhome_1.naver
쥬니어네이버 http://jr.naver.com
해피빈 http://happybean.naver.com/main/SectionMain.nhn
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
공지사항 //www.naver.com/NOTICE
서비스 전체보기 more.html
바로가기 https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EA%BD%83
프로젝트 꽃 https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EA%BD%83
다운받기 http://whale.naver.com/
네이버웨일 http://whale.naver.com/
크리에이터 http://www.navercorp.com/ko/service/creators.nhn
스몰비즈니스 http://www.navercorp.com/ko/service/business.nhn
비즈니스 파트너 안내 http://business.naver.com/guide.html
비즈니스 · 광고 http://business.naver.com/service.html
스토어 개설 https://sell.storefarm.naver.com/#/home/about
지역업체 등록 https://smartplace.naver.com/
네이버 개발자센터 http://developers.naver.com
오픈 API https://developers.naver.com/docs/common/openapiguide/#/apilist.md/
오픈소스 http://naver.github.io/
네이버 D2 http://d2.naver.com/
네이버 랩스 http://www.naverlabs.com/
회사소개 http://www.navercorp.com/
인재채용 http://recruit.navercorp.com/naver/recruitMain
제휴제안 https://www.navercorp.com/ko/company/proposalGuide.nhn
이용약관 /policy/service.html
개인정보처리방침 /policy/privacy.html
청소년보호정책 /policy/youthpolicy.html
네이버 정책 /policy/spamcheck.html
고객센터 https://help.naver.com/
NAVER Corp. http://www.navercorp.com/
관련 글
[Python/웹 크롤링(Web Crawling) 강좌] – 파이썬 웹 크롤링(Web Crawling) 강좌 – 2. 교보문고 베스트셀러 책이름, 저자, 가격 출력하기 [Python/웹 크롤링(Web Crawling) 강좌] – 파이썬 웹 크롤링(Web Crawling) 강좌 – 3. 네이버 베스트셀러 책이름, 저자, 가격 출력하기 [Python/웹 크롤링(Web Crawling) 강좌] – 웹크롤링 강좌 – 기상청의 동네예보 가져오기
[python] 파이썬 웹 크롤링(1): 크롤링 기본 원리
위 코드는 네이버 메인페이지의 내용을 HTML 형식으로 가져오는 코드 입니다. 가장 먼저 urllib 라이브러리에서 웹서버에 요청을 보내기 위해 필요한 함수를 불러오고 urlopen을 이용해 원하는 사이트를 오픈한 결과를 읽어들여 html로 저장합니다. 아웃풋 결과를 보면 HTML 코드라는 것을 알 수 있습니다. 만약 HTML 코드에 이미지 소스 파일이 있다면 어떨까요? 한번의 urlopen으로 이미지 파일 까지 가져올 수 있을까요? 답은 그렇지 않다입니다. 현재까지는 한번의 크롤링으로는 HTML 파일 하나만 가지고 올 수 있으며 HTML에 걸려있는 추가적인 이미지파일까지 랜더링하기 위해서는 추가적인 작업이 필요합니다. 참고로 위에서 urllib 라이브러리를 사용했는데 만약 파이썬2 사용자라면 urllib2 라이브러리를 사용해야할 것입니다. urllib 라이브러리는 기본적인 라이브러리 이므로 따로 설치할 필요 없습니다.
from urllib.request import urlopen from urllib.error import HTTPError from bs4 import BeautifulSoup def getTitle ( url ): try : html = urlopen ( url ) except HTTPError as e : return None try : bsObj = BeautifulSoup ( html . read ()) title = bsObj . body . h1 except AttributeError as e : return None return title
>>> from urllib.request import urlopen >>> from bs4 import BeautifulSoup >>> html = urlopen ( “https://www.naver.com” ) >>> bsObj = BeautifulSoup ( html . read ()) >>> print ( bsObj ) < ! DOCTYPE html > < html data - dark = "false" lang = "ko" >
18 thg 8, 2020 — 크롤링의 기본 메커니즘은 다음과 같습니다. 파이썬으로 웹서버에 정보 요청하기. 서버 응답을 받은 후 데이터 핸들링. 웹사이트와 상호작용.
- Source: losskatsu.github.io
- Views: 5114
- Publish date: 29 minute ago
- Downloads: 4911
- Likes: 4395
- Dislikes: 5
- Title Website: [python] 파이썬 웹 크롤링(1): 크롤링 기본 원리
- Description Website: 18 thg 8, 2020 — 크롤링의 기본 메커니즘은 다음과 같습니다. 파이썬으로 웹서버에 정보 요청하기. 서버 응답을 받은 후 데이터 핸들링. 웹사이트와 상호작용.
파이썬 코딩 무료 강의 (활용편3) – 웹 크롤링? 웹 스크래핑! 제가 가진 모든 비법을 알려드리겠습니다. [나도코딩]
- Source: Youtube
- Views: 34826
- Date: 9 hours ago
- Download: 40736
- Likes: 436
- Dislikes: 10
[python] 파이썬 웹 크롤링(1): 크롤링 기본 원리
파이썬 웹 크롤링(1): Part1 크롤러 만들기
본 포스팅은 Web Scraping with Python by Ryan Mitchell을 참고하였습니다.
참고 링크
Chapter1. 첫 크롤러
1.1 크롤링 할 때 해야할 것과 알아야 하는 것
크롤링(crawling)은 무엇을 하는 것일까요? 크롤링의 기본 메커니즘은 다음과 같습니다.
파이썬으로 웹서버에 정보 요청하기
서버 응답을 받은 후 데이터 핸들링
웹사이트와 상호작용
따라서 크롤링은 이용하면 인터넷을 돌아다니고, 정보를 모으고, 저장한 데이터를 다른 곳에 사용할 수도 있습니다. 그렇다면 크롤링을 위해 알아야할 것은 무엇일까요?
HTML 데이터 가져오기
데이터 파싱(parsing)
타겟 정보 저장
(옵션) 다른 페이지로 이동하기
크롤링을 위해서 알아야 할 것은 위와 같습니다. 그럼 이제부터 본격적으로 크롤링에 대해 알아보겠습니다.
1.2 크롤링의 시작
1.2.1 네이버 메인 페이지 읽어 들이기
이번 챕터 부터는 간단한 크롤링을 해보겠습니다. 이번 챕터에서 할 일은 아래와 같습니다.
웹서버에 GET 요청 보내기(특정 페이지에 대해)
HTML 아웃풋 읽기
내용 중에 자신이 원하는 내용 추출하기
아래와 같은 간단한 코드로 네이버 메인페이지의 내용을 요청해보겠습니다.
>>> from urllib.request import urlopen >>> html = urlopen ( “https://www.naver.com” ) >>> print ( html . read ()) b ‘
…중략…
위 코드는 네이버 메인페이지의 내용을 HTML 형식으로 가져오는 코드 입니다. 가장 먼저 urllib 라이브러리에서 웹서버에 요청을 보내기 위해 필요한 함수를 불러오고 urlopen을 이용해 원하는 사이트를 오픈한 결과를 읽어들여 html로 저장합니다. 아웃풋 결과를 보면 HTML 코드라는 것을 알 수 있습니다. 만약 HTML 코드에 이미지 소스 파일이 있다면 어떨까요? 한번의 urlopen으로 이미지 파일 까지 가져올 수 있을까요? 답은 그렇지 않다입니다. 현재까지는 한번의 크롤링으로는 HTML 파일 하나만 가지고 올 수 있으며 HTML에 걸려있는 추가적인 이미지파일까지 랜더링하기 위해서는 추가적인 작업이 필요합니다. 참고로 위에서 urllib 라이브러리를 사용했는데 만약 파이썬2 사용자라면 urllib2 라이브러리를 사용해야할 것입니다. urllib 라이브러리는 기본적인 라이브러리 이므로 따로 설치할 필요 없습니다.
1.2.2 BeautifulSoup?
BeautifulSoup은 파이썬 크롤링에서 중요한 역할을 하는 라이브러리 입니다. BeautifulSoup은 파이썬에 기본으로 장착된 라이브러리가 아니므로 설치 과정이 필요합니다. 아래와 같은 코드를 입력해 설치합시다.
$ pip install beautifulsoup4
만약 파이썬 가상환경 설치과정이 궁금하다면 파이썬 가상환경 설치하기를 참고해주세요. BeautifulSoup 설치를 성공하셨다면 파이썬을 실행해 BeautifulSoup 라이브러리를 불러와보겠습니다.
from bs4 import BeautifulSoup
자, 그럼 이번에는 BeautifulSoup을 이용해 네이버 메인 페이지를 긁어와 보겠습니다.
>>> from urllib.request import urlopen >>> from bs4 import BeautifulSoup >>> html = urlopen ( “https://www.naver.com” ) >>> bsObj = BeautifulSoup ( html . read ()) >>> print ( bsObj ) < ! DOCTYPE html > < html data - dark = "false" lang = "ko" >
앞선 예제와 다른 점은 html.read()에 대해 BeautifulSoup 함수를 사용한다는 것입니다. BeautifulSoup 함수는 html 내용을 읽어 들인 후 BeautifulSoup 객체로 바꾼다는 의미입니다. 그렇다면 html.read()와 BeautifulSoup(html.read())는 어떻게 다를까요?
>>> print ( html . read ()) content = ” \xeb\x84\xa4\xec\x9d\xb4\xeb\xb2\x84 …중략…
>>> bsObj = BeautifulSoup ( html . read ()) >>> print ( bsObj ) content = “네이버 메인에서 다양한 정보와 유용한 컨텐츠를 만나 보세요”
위 결과와 같이 html.read()는 html 파일 내용을 읽은 후 문자열을 바이트 코드로 나타내지만 BeautifulSoup(html.read())를 이용한 결과는 string을 보여줍니다.
1.2.3 예외 처리
지금까지 따라 오셨다면 아마 이런 상상을 하실겁니다.
크롤러에게 일을 시켜놓고 잠을 자러 갑니다. 그리고 다음날 눈을 떠보니 크롤러가 모든 일을 끝냅니다.
하지만 현실은 이렇습니다.
무언가의 이유로 크롤러 에러 발생?!
네, 그렇습니다. 웹 사이트는 상당히 지저분합니다. 따라서 크롤러는 예상치못한 데이터 포맷을 만난다던가 하는 여러가지 이유로 에러를 뱉어내며 멈춰버릴 가능성이높습니다.
html = urlopen ( “https://www.naver.com” )
위 문장에서 에러가 발생한다면 어떤 가능성이 존재할까요?
서버 내부에 해당 페이지가 존재하지 않는 경우
서버를 찾을 수 없을 경우
한줄짜리 간단한 코드라도 위와 같은 이유로 에러가 날 수 있습니다. 그리고 첫번째 에러의 경우, 즉 해당 페이지가 존재하지 않는다면 404, 500에러 같은 에러를 뱉어냅니다. 에러 메시지를 본다면 왜 에러가 났는지도 알 수 있겠죠. 아무튼 에러가 발생하더라도 프로그램이 멈추지 않게 예외처리를 해줍니다. 파이썬의 try except 구문을 사용합시다.
try : html = urlopen ( “https://www.naver.com” ) except HTTPError as e : print ( e ) else : # program continue…
위 코드는 네이버 메인 사이트를 열어 html 내용을 읽어들이되 에러가 발생하면, 에러 메시지를 출력하라는 뜻입니다.
그렇다면 두번째 에러는 어떨까요? 두번째 에러는 서버를 찾을 수 없는 경우 입니다. 이 경우에는 html값이 None값을 가집니다. 따라서 두번쨰 에러를 대비해 아래와 같이 코드를 짭니다.
if html is None : print ( “URL is not found” ) else : #program continue…
위 코드는 if else 구문으로 간단하게 구현 가능합니다. html이 None값을 가진다면 “URL is not found”를 출력하라는 뜻입니다.
위와 같이 에러 처리를 해보았는데, 모든 에러에 대해 위와 같이 처리한다는건 여간 귀찮은 일이 아닙니다. 하지만 다행스럽게도 BeautifulSoup에서는 접근한 태그의 존재 유무 체크에 대해 편리한 방법을 제공합니다.
>>> print ( bsObj . nonExistentTag ) None
위에서 네이버 메인 페이지는 존재했기 때문에 해당 태그가 존재 유무를 체크하는 nonExistentTag를 실행하면 None값을 출력합니다. 문제는 bsObj.nonExistentTag가 출력하는 값에 상관없이 또다른함수를 실행할 때 입니다.
>>> print ( bsObj . nonExistentTag . someTag ) AttributeError : ‘NoneType’ object has no attribute ‘someTag’
위 코드에서 bsObj.nonExistentTag는 이미 None값을 가집니다. 그런데 None값을 가지는 값에 대해 someTag를 실행했으니 에러가 발생합니다.
그럼 이제 위와 같은 경우를 커버할 수 있는 코드를 짜보겠습니다.
try : badContent = bsObj . nonExistingTag . anotherTag except AttributeError as e : print ( “Tag was not found” ) else : if badContent == None : print ( “Tag was not found” ) else : print ( badContent )
하지만 위 코드는 다소 복잡해 보입니다. 따라서 좀 더 간소하게 짠다면 아래와 같이 코드 작성할 수 있습니다.
from urllib.request import urlopen from urllib.error import HTTPError from bs4 import BeautifulSoup def getTitle ( url ): try : html = urlopen ( url ) except HTTPError as e : return None try : bsObj = BeautifulSoup ( html . read ()) title = bsObj . body . h1 except AttributeError as e : return None return title
위 코드에서 만든 getTitle 함수는 해당 페이지의 타이틀을 가져오는 함수입니다. 만약 어떤 문제가 발생한다면 None값을 가지게 합니다. 예외처리로는 HTTPError를 체크합니다.
title = getTitle ( “https://www.naver.com” ) if title == None : print ( “Title could not be found” ) else : print ( title )
[Python/웹 크롤링] 파이썬 웹 크롤링 관련 패키지 3종 총정리
# selenium의 webdriver를 사용하기 위한 import from selenium import webdriver # selenium으로 무엇인가 입력하기 위한 import from selenium.webdriver.common.keys import Keys # 페이지 로딩을 기다리는데에 사용할 time 모듈 import import time # 크롬드라이버 실행 (경로 예: ‘/Users/Roy/Downloads/chromedriver’) driver = webdriver.Chrome(‘chromedriver의 경로를 입력할 것’) #크롬 드라이버에 url 주소 넣고 실행 driver.get(‘https://www.google.co.kr/’) # 페이지가 완전히 로딩되도록 3초동안 기다림 time.sleep(3) #검색어 창을 찾아 search 변수에 저장 search = driver.find_element_by_xpath(‘//*[@id=”google_search”]’) #search 변수에 저장된 곳에 값을 전송 search.send_keys(‘코딩유치원 파이썬’) time.sleep(1) #search 변수에 저장된 곳에 엔터를 입력 search.send_keys(Keys.ENTER)
import requests # requests 패키지 가져오기 url = ‘https://www.naver.com’ # 가져올 url 문자열로 입력 response = requests.get(url) # requests의 get함수를 이용해 해당 url로 부터 html이 담긴 자료를 받아옴 print(response.status_code) # 정상적으로 받아졌다면 200이라는 상태코드를 반환 html_text = response.text # 우리가 얻고자 하는 html 문서가 여기에 담기게 됨
import requests # 주로 bs로 이름을 간단히 만들어서 사용함 from bs4 import BeautifulSoup as bs response = requests.get(‘https://www.google.co.kr’) # html을 잘 정리된 형태로 변환 html = bs(response.text, ‘html.parser’) # find 함수로 특정 이미지를 선택하는 코드 google_logo = html.find(‘img’, {‘id’:’hplogo’})
24 thg 3, 2021 — 오늘은 웹크롤링 관련 파이썬 패키지 3가지를 알아보겠습니다. 우리가 앞으로 하게 될 웹 크롤링은 두 가지 단계를 거칩니다. 1) 원하는 웹 페이지의 html …
- Source: coding-kindergarten.tistory.com
- Views: 86512
- Publish date: 8 hours ago
- Downloads: 49345
- Likes: 4940
- Dislikes: 7
- Title Website: [Python/웹 크롤링] 파이썬 웹 크롤링 관련 패키지 3종 총정리
- Description Website: 24 thg 3, 2021 — 오늘은 웹크롤링 관련 파이썬 패키지 3가지를 알아보겠습니다. 우리가 앞으로 하게 될 웹 크롤링은 두 가지 단계를 거칩니다. 1) 원하는 웹 페이지의 html …
파이썬 초보자도 웹 크롤링 2시간이면 됩니다ㅣNAVER 쇼핑 데이터 실습 따라하기
- Source: Youtube
- Views: 93667
- Date: 31 minute ago
- Download: 61043
- Likes: 40
- Dislikes: 8
[Python/웹 크롤링] 파이썬 웹 크롤링 관련 패키지 3종 총정리
안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.
코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석, 머신러닝 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.
업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.
[웹 크롤링 기초]2021.03.22 – [파이썬 패키지/웹 크롤링] – [Python/웹 크롤링] 파이썬 웹 크롤링 기초 of 기초
2021.03.23 – [파이썬 패키지/웹 크롤링] – [Python/웹 크롤링] 크롬드라이버 크롬 버전에 맞춰서 설치하는법
2021.03.24 – [파이썬 패키지/웹 크롤링] – [Python/웹 크롤링] 파이썬 웹 크롤링 관련 패키지 3종 총정리
2021.03.27 – [파이썬 패키지/웹 크롤링] – [Python/웹 크롤링] 파이썬 웹 크롤링을 위한 속성 HTML, CSS 요약 정리
2021.03.28 – [파이썬 패키지/웹 크롤링] – [Python/웹 크롤링] 동적/정적 페이지 차이와 그에 따른 크롤링 방법 간단정리
[정적 웹크롤링]2021.03.30 – [파이썬 패키지/웹 크롤링] – [Python/웹 크롤링] 파이썬 웹 크롤링 정적 수집 방법 개념 정리_find, find_all, select, select_one
2021.04.02 – [파이썬 패키지/웹 크롤링] – [Python/Requests/Beautifulsoup] 네이버 뉴스 기사 제목 크롤링을 통한 정적 수집 기초 정리
2021.04.06 – [파이썬 패키지/웹 크롤링] – [Python/Reuqests/Beautifulsoup] 파이썬 정적 웹크롤링 텍스트, 이미지, 하이퍼링크, 속성 가져오는 법
[동적 웹크롤링]2021.04.03 – [분류 전체보기] – [코딩유치원] 네이버 뉴스 기사 제목 크롤링을 통한 동적 수집 기초 정리(selenium, beautifulsoup)
2021.06.21 – [파이썬 패키지/웹 크롤링] – [Python/Selenium] 파이썬 동적 웹크롤링 텍스트, 하이퍼링크, 이미지, 속성 가져오는 법
2021.05.22 – [파이썬 패키지/GUI 프로그램] – [파이썬 GUI 프로그래밍] 잡플래닛 리뷰 정보 크롤링 GUI 프로그램
오늘은 웹크롤링 관련 파이썬 패키지 3가지를 알아보겠습니다.
우리가 앞으로 하게 될 웹 크롤링은 두 가지 단계를 거칩니다.
1) 원하는 웹 페이지의 html문서를 싹 긁어온다.
2) html 문서에서 원하는 것을 골라서 사용한다.
위의 두 가지 작업과 관련하여 자주 사용되는 패키지를 하나씩 살펴보겠습니다.
1. requests
html 문서를 가져올 때 사용하는 패키지입니다. requests는 사용자 친화적인 문법을 사용하여 다루기 쉬우면서 안정성이 뛰어나다고 합니다. 그래서 파이썬 기본 라이브러리에 포함된 urllib 패키지보다 자주 사용됩니다.
설치 방법
터미널에서 아래와 같이 입력하면 됩니다. (만약 anaconda 환경이 아니라 python을 사용한다면 conda 대신 pip를 입력할 것)
conda install requests
사용 방법
import requests # requests 패키지 가져오기 url = ‘https://www.naver.com’ # 가져올 url 문자열로 입력 response = requests.get(url) # requests의 get함수를 이용해 해당 url로 부터 html이 담긴 자료를 받아옴 print(response.status_code) # 정상적으로 받아졌다면 200이라는 상태코드를 반환 html_text = response.text # 우리가 얻고자 하는 html 문서가 여기에 담기게 됨
2. Selenium
selenium 패키지는 지난 시간 설치했던 chromedriver를 이용해 chrome을 제어하기 위해 사용합니다. 크롤링을 하다보면 무엇인가 입력하거나 특정 버튼을 눌러야 하는 상황이 발생합니다. 이 때 selenium을 이용하는 것입니다.
만약 크롬드라이버가 설치되어 있지 않다면 아래의 글을 참고해서 설치해주세요.
2021.03.23 – [파이썬 기초/개발환경 구축] – [코딩유치원] 크롬드라이버 크롬 버전에 맞춰서 설치하는법
설치 방법
터미널에서 아래와 같이 입력하면 됩니다. (만약 anaconda 환경이 아니라 python을 사용한다면 conda 대신 pip를 입력할 것)
conda install selenium
사용 방법
이 패키지는 조금 공부할 것이 많아서 여기서는 대략적으로 어떤 식으로 사용하는지 파악하시면 좋을 것 같아요.
driver.find_element 함수나 send_keys 함수는 여기서 다 다루기가 힘들어서 다음 시간에 따로 정리하겠습니다.
# selenium의 webdriver를 사용하기 위한 import from selenium import webdriver # selenium으로 무엇인가 입력하기 위한 import from selenium.webdriver.common.keys import Keys # 페이지 로딩을 기다리는데에 사용할 time 모듈 import import time # 크롬드라이버 실행 (경로 예: ‘/Users/Roy/Downloads/chromedriver’) driver = webdriver.Chrome(‘chromedriver의 경로를 입력할 것’) #크롬 드라이버에 url 주소 넣고 실행 driver.get(‘https://www.google.co.kr/’) # 페이지가 완전히 로딩되도록 3초동안 기다림 time.sleep(3) #검색어 창을 찾아 search 변수에 저장 search = driver.find_element_by_xpath(‘//*[@id=”google_search”]’) #search 변수에 저장된 곳에 값을 전송 search.send_keys(‘코딩유치원 파이썬’) time.sleep(1) #search 변수에 저장된 곳에 엔터를 입력 search.send_keys(Keys.ENTER)
3. BeautifulSoup4
마지막으로 BeautifulSoup4라는 패키지는 매우 길고 정신없는 html 문서를 잘 정리되고 다루기 쉬운 형태로 만들어 원하는 것만 쏙쏙 가져올 때 사용합니다. 이 작업을 파싱(Parsing)이라고도 부릅니다.
설치 방법
터미널에서 아래와 같이 입력하면 됩니다. (만약 anaconda 환경이 아니라 python을 사용한다면 conda 대신 pip를 입력할 것)
conda install beautifulsoup4
사용 방법
이 패키지 역시 내용이 많아서 여기서는 대략적으로 어떤 식으로 사용하는지 파악하시면 좋을 것 같아요.
파싱을 하는 방법에는 크게 Xpath를 이용하는 법과 CSS selector를 이용하는 방식이 있는데, 이것 역시 다음에 정리하는 시간을 갖겠습니다.
import requests # 주로 bs로 이름을 간단히 만들어서 사용함 from bs4 import BeautifulSoup as bs response = requests.get(‘https://www.google.co.kr’) # html을 잘 정리된 형태로 변환 html = bs(response.text, ‘html.parser’) # find 함수로 특정 이미지를 선택하는 코드 google_logo = html.find(‘img’, {‘id’:’hplogo’})
오늘은 가볍게 파이썬을 이용하여 웹 크롤링을 할 때 사용되는 주요 패키지에 대해서 정리해보았습니다.
다음 시간에는 크롤링을 자유자재로 하기 위해 꼭 필요한 내용들을 더 깊게 들어가보도록 하겠습니다.
주제에 대한 관련 정보 파이썬 웹 크롤링
Bing에서 파이썬 웹 크롤링 주제에 대한 최신 정보를 볼 수 있습니다.
주제에 대한 기사 보기를 마쳤습니다 파이썬 웹 크롤링. 이 기사가 유용했다면 공유하십시오. 매우 감사합니다. 사람들이 이 주제와 관련하여 자주 검색하는 키워드: 파이썬 웹 크롤링 파이썬 웹크롤링 셀레니움, 파이썬 크롤링 예제, 파이썬 크롤링 하는 법, 파이썬 크롤링 코드, 파이썬 웹 크롤링 패키지, 파이썬 웹 스크래핑, 파이썬 크롤링 BeautifulSoup, 파이썬 웹크롤링 오픈소스