코락 CoRock
코딩하는 락스타
코락 CoRock
  • 분류 전체보기 (394)
    • frameworks (19)
      • spring (19)
      • spring-boot (0)
      • testing (0)
    • languages (94)
      • java (39)
      • kotlin (0)
      • python (42)
      • r (13)
    • libraries (0)
    • programming (239)
      • android (13)
      • c (17)
      • cpp (22)
      • database (18)
      • design-pattern (4)
      • data-structures (11)
      • git (8)
      • hadoop (6)
      • html-css (7)
      • issue (4)
      • javascript (26)
      • jsp (34)
      • os (29)
      • php (6)
      • preferences (19)
      • etc (15)
    • discography (37)
      • k-pop (18)
      • pop (19)
    • blog (4)

블로그 메뉴

  • Programming
  • Java
  • JavaScript
  • Discography
  • K-Pop Songs
  • Pop Songs
  • Blog
  • Guestbook

공지사항

인기 글

태그

  • jsp
  • Java
  • oracle
  • r
  • Spring
  • javascript
  • 자바스크립트
  • Android
  • linux
  • 파이썬
  • python
  • CentOS

최근 댓글

최근 글

티스토리

반응형
hELLO · Designed By 정상우.
코락 CoRock

코딩하는 락스타

[Python] 웹 스크레이핑
languages/python

[Python] 웹 스크레이핑

2019. 4. 23. 19:40
반응형

27. 웹 스크레이핑

 

27.1 웹 스크래핑의 개념

27.1.1 웹 스크레이핑(web scraping)

웹 사이트 상에서 원하는 부분에 위치한 정보를 컴퓨터로 하여금 자동으로 추출하여 수집하도록 하는 기술

 

27.1.2 웹 크롤링(web crawling)

자동화 봇(bot)인 웹 크롤러(web crawler)가 정해진 규칙에 따라 복수 개의 웹 페이지를 브라우징하는 작업

 

27.2 웹 스크래핑을 위한 라이브러리

27.2.1 BeautifulSoup

27.2.2 scrapy

 

# 이미지 다운로드 방법1
import urllib.request

# daum 사이트의 로고에서 마우스 우클릭 - 이미지 주소 복사
url = "https://t1.daumcdn.net/daumtop_chanel/op/20170315064553027.png"
savename = "d:/data/images/daum.png"
# url이 가리키는 주소에 접근해서 해당 자원을 로컬 컴퓨터에 저장하는 코드
urllib.request.rurlretrieve(url, savename)
print("저장되었습니다...!")
# 지정된 디렉토리에 다운로드 됨
# 매개변수를 추가하여 인터넷 리소스를 요청하는 방법
import urllib.request
import urllib.parse
API = "http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp"
# url에 특수문자, 한글이 포함된 경우 URL 인코딩이 필요함
# 지역번호 : 전국 108, 서울/경기 109, 강원 105, 충북 131, 충남 133,
#			전북 146, 전남 156, 경북 143, 경남 169, 제주 184
values = { 'stnId': '108' } # 전국 옵션
# values = { 'stnId': '109' } # 서울/경기
params = urllib.parse.urlencode(values)
# 요청 전용 URL 생성
url = API + "?" + params
print("url=", url)
# 다운로드
data = urllib.request.urlopen(url).read()
text = data.decode("utf-8")
print(text)
# 스크래핑(scraping) : 웹사이트에서 원하는 정보를 추출하는 것
# BeautifulSoup : HTML 파싱 라이브러리
# 사이트 : https://www.crummy.com/software/BeautifulSoup/
# pip install beautifulsoup4
from urllib.request import urlopen
from bs4 import BeautifulSoup

# stackoverflow 메인 페이지의 타이틀 텍스트 읽기
html = urlopen('https://stackoverflow.com/')
bs = BeautifulSoup(html.read(), 'html.parser')
print(bs.h1)
# 네이버 금융에서 환율 정보 가져오기
from bs4 import BeautifulSoup
import urllib.request as req
# HTML 가져오기
url = "http://info.finance.naver.com/marketindex/"
res = req.urlopen(url)
# HTML 분석하기
soup = BeautifulSoup(res, "html.parser")
# 원하는 데이터 추출
price = soup.select_one("div.head_info > span.value").string
print("usd/krw =", price)

4) pdf 문서 읽기

 

6) 로그인이 필요한 사이트에서의 데이터 수집

로그인이 필요한 사이트에서는 쿠키, 세션 등의 인증수단이 필요하여 웹 스크래핑 코드상에서 추가로 처리해야 할 작업이 생긴다.

웹 브라우저의 개발자 도구(F12)의 Network 탭을 보면 어떤 url에서 로그인 관련 인증이 처리되는지 볼 수 있다(예를 들면 login_check.do).

 

# 로그인을 하지 않아 세션이 없는 상태이므로 장바구니 목록이 보이지 않음
# 이런 경우에는 세션을 생성하는 코드가 필요함
import requests

result = requests.get("http://localhost/jsp02/cart_servlet/list.do")
print(result.text)
# jsp02 사이트를 구동한 후 로그인 페이지 테스트

# shop/cart_list.jsp 에서 일부 코드 수정
# <td><span>${row.product_name}</span></td> => <span>으로 상품이름을 감싼다.

# 로그인을 위한 모듈
import requests
from bs4 import BeautifulSoup

params = {'userid': 'park', 'passwd': '1234'}

session = requests.Session()

s = session.post("http://localhost/jsp02/login_servlet/login.do", params)
print("세션아이디: ", s.cookies.get_dict())
res = session.get("http://localhost/jsp02/cart_servlet/list.do")

soup =

 

 

반응형
저작자표시 비영리 변경금지
    'languages/python' 카테고리의 다른 글
    • [Python] 회귀분석
    • [Python] 기술통계와 모델링
    • [Python] Matplotlib
    • [Python] Pandas
    코락 CoRock
    코락 CoRock
    A COder dreaming of being a ROCKstar

    티스토리툴바