본문 바로가기

Python/Crawling

웹 크롤러(Beautilful Soup, Scrapy)

728x90

웹 크롤러(Web Crawler)

자동화된 방법으로 웹(WEB)에서 다양한 정보를 수집하는 소프트웨어를 의미합니다. 예를 들어 특정한 웹 사이트에 주기적으로 올라오는 글을 실시간으로 문자로 알림해주는 서비스 등을 만들고 싶을 때 사용할 수 있습니다.

웹 크롤러가 매우 유용한 이유는 원하는 서비스로부터 원하는 정보를 편하게 얻어올 수 있기 때문입니다.

또한 웹 크롤러는 언어를 막론하고 자신이 원하는 언어로 개발할 수 있습니다.


뷰티풀 수프(Beautilful Soup)를 이용한 예제

뷰티풀 수프는 특정 웹 사이트의 소스코드를 가져와 자유자재로 파싱(Parsing)하는 작업에 큰 도움을 줍니다.

import requests
from bs4 import BeautifulSoup

# 특정 URL에 접속하는 요청(Request) 객체를 생성합니다.
request = requests.get('http://www.dowellcomputer.com/main.jsp')

# 접속한 이후의 웹 사이트 소스코드를 추출합니다.
html = request.text

# HTML 소스코드를 파이썬 객체로 변환합니다.
soup = BeautifulSoup(html, 'html.parser')

# <a> 태그를 포함하는 요소를 추출합니다.
links = soup.select('td > a')

# 모든 링크에 하나씩 접근합니다.
for link in links:
    # 링크가 href 속성을 가지고 있다면
    if link.has_attr('href'):
        # href 속성의 값으로 notice라는 문자가 포함되어 있다면
        if link.get('href').find('notice') != -1:
            print(link.text)

https://ndb796.tistory.com/120


Scrapy를 사용한 예제

# -*- coding: utf-8 -*-
import scrapy
import sys
from scrapy.spiders import Spider
from scrapy.selector import HtmlXPathSelector
from APT2U.items import APT2UItem
from scrapy.http import Request
from scrapy.selector import Selector
reload(sys)
sys.setdefaultencoding('utf-8')
 
class APT2U_Spider(scrapy.Spider):
    name = "APT2U"  #spider 이름
    allowed_domains = ["www.apt2you.com"]   #크롤링할 최상위 도메인
    start_urls = ["http://www.apt2you.com/houseSaleSimpleInfo.do"]  #실제 크롤링할 주소
     
    def parse(self, response):
        hxs = Selector(response)    #지정된 주소에서 전체 소스코드를 가져옴
        selects =[] #전체 소스코드 중에서 필요한 영역만 잘라내서 담을 리스트
        selects = hxs.xpath('//tbody[@class="line"]/tr')    #필요한 영역을 잘라서 리스트에 저장
        items = [] #데이터를 Item별로 구별해서 담을 리스트 
        for sel in selects:
            item = APT2UItem() #item 객체 선언  
            item['aptname'] = sel.xpath('th[@scope="row"]/a[@href="#none"]/text()').extract() #주택명 추출
            item['link'] = sel.xpath('th[@scope="row"]/a/@onclick').re('\d+') #링크 추출
            item['link'][0] = "http://www.apt2you.com/houseSaleDetailInfo.do?manageNo="+item['link'][0] #전체링크주소구성
            item['company'] = sel.xpath('td[1]/text()').extract() #건설업체 추출
            item['receiptdate'] = sel.xpath('normalize-space(td[2]/text())').extract() #청약기간 추출
            item['result_date'] = sel.xpath('td[@class="end"]/text()').extract() #당첨자발표일 추출
            items.append(item) #Item 1개 세트를 리스트에 담음
        return items

https://uslifelog.tistory.com/45


Selenium를 사용한 예제

는 다른 게시글로 ㅎ

+ Phantom JS라는 것도 있는 듯

[출처]

https://uslifelog.tistory.com/45

https://ndb796.tistory.com/120

728x90

'Python > Crawling' 카테고리의 다른 글

Selenium - xpath  (0) 2023.05.04
Selenium - 아래 또는 위로 스크롤하는 방법  (0) 2023.05.04
Selenium - Waits  (0) 2023.05.04
Web Driver & Selenium  (0) 2023.05.04
TextRank를 이용한 문서 요약  (0) 2023.05.03