yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆

크롤링 (crawling) 본문

기타 기본 지식

크롤링 (crawling)

yehey 2020. 11. 10. 05:14

크롤링 (crawling)

:WEB 상에 존재하는 contents를 수집하는 작업

-프로그래밍으로 자동화가 가능

-HTML 페이지를 가져와 HTML/CSS 등을 파싱, 필요한 데이터를 추출

크롤링 방법

-Open API를 제공하는 서비스에 Open API를 호출해서 받은 데이터 중 필요한 것만 추출하는 기법

-Selenium 등 브라우저를 프로그래밍으로 조작해 필요한 데이터만 추출하는 기법

하이퍼링크 (Hyper link)

-다른 문서나 미디어 파일을 연결

-HTML에서는 a 태그에 href (hyper reference) 속성 값을 주는 형식으로 사용

-a 태그를 이용하여 웹 사이트의 URL은 물론, HTML 문서, 워드 프로세서, 압축파일, 실행파일 등을 모든 종류의 파일로 링크시킬 수 있음

 

from bs4 import BeautifulSoup
from urllib.request import urlopen
import re

host="https://www.naver.com/"
html=urlopen(host)
bsObj=BeautifulSoup(html,"html.parser")

linkList = set()

#http, naver, .com 이 포함된 모든 태그
a=bsObj.findAll("a",href=re.compile("^https?://[a-z,.]*naver\.com"))

for link in a:
	linkList.add(link["href"])
linkList

# /~ 형태 		ex)https://www.naver.com/policy/privacy.html
a=bsObj.findAll("a",href=re.compile("^\/"))

for link in a:
	linkList.add(host[:-1]+link["href"])
linkList

#기타 태그		ex)https://www.naver.com/#
a=bsObj.findAll("a",href=re.compile("^[^http,\/]"))

for link in a:
	linkList.add(host+link["href"])
linkList

Robots.txt

:웹 크롤러와 같은 착한 로봇들의 행동을 관리하는 것

-로봇들을 관리해서 원하는 페이지를 노출 되게 혹은 노출이 되지 않게 다룰 수 있음

 

User-Agent 웹 사이트 관리자가 어떤 종류의 로봇이 크롤링을 하는지 알 수 있게 도움
Disallow 어떤 웹 페이지 URL을 크롤링 하지 않아야 하는지 알려줌
Allow 모든 검색엔진이 이 명령을 인식하지는 않지만 특정 웹 페이지나 디렉토리에 접근하라는 명령
Crawl-delay 검색 엔진 스파이더 봇이 서버를 과도하게 사용하지 못하도록 대기하라는 명령

 

웹 크롤링 유의 사항

  • 웹 사이트 루트에는 Robots.txt 가 존재
  • 웹 사이트에서 크롤링되어서는 안되는 부분들을 표시함으로 웹 보안을 유지
  • disallow한 항목들에는 들어가서는 안됨
#Disallow 링크 수집

from bs4 import BeautifulSoup
from urllib.request import urlopen

host="http://www.boannews.com/"
hostRobot=host+"robots.txt"
html=urlopen(hostRobot)
bsObj=BeautifulSoup(html,"html.parser")

data=bsObj.string
robots = set()

for line in data.split("\n"):
	if line.find("Disallow: ")==0:
    	robots.add(host[:-1]+line.split("Disallow: ")[1].strip())
        
robots

 

'기타 기본 지식' 카테고리의 다른 글

웹 스캐너  (0) 2020.11.10
큐 (Queue)  (0) 2020.10.20
스택 구조 (Stack )  (0) 2020.10.20
List (연결리스트)  (0) 2020.10.20
재귀 함수  (0) 2020.10.20
Comments