webcrawling

web crawling 하기전에 알아둬야 할 사항

  • 예를들어, 네이버 홈페이지를 크롤링한다고 하면 www.naver.com/robots.txt을 브라우저 주소창에 입력하면 로봇 배제 규약에 관한 내용이 나옵니다.

robots.txt 내용 요약

  1. 모든 로봇 접근 허락
    User-agent: *
    Allow : /
    1. 모든 로봇 접근 차단
      User-agent: *
      Disallow: /
    2. 모든 로봇에 디렉토리 3곳 접근 차단
      User-agent: *
      Disallow: /cgi-bin/
      Disallow: /tmp/
      Disallow: /junk/
    3. 모든 로봇에 특정 파일 접근 차단
      User-agent: *
      Disallow: /directory/file.html
    4. BadBot 로봇에 모든 파일 접근 차단
      User-agent: BadBot
      Disallow: /
    5. BadBot과 Googlebot에 특정 디렉토리 접근 차단
      User-agent: BadBot
      User-agent: Googlebot
      Disallow: /private/

참고사항 2020년 4월 21일 현재

  1. 네이버 로봇 규약 설정
    출처: https://searchadvisor.naver.com/guide/seo-basic-robots
  • 사이트의 루트 페이지만 수집 허용으로 설정합니다.
    User-agent: *
    Disallow: /
    Allow: /$

  1. 다음 로봇 규약 설정
  • 모든 로봇의 접근 차단
    User-agent: *
    Disallow: /

    1. 카카오 로봇 규약 설정
  • 모든 로봇의 접근 차단

  • See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file

  • To ban all spiders from the entire site uncomment the next two lines:
    User-agent: *
    Disallow: /

문제가 있거나 오타가 있으면 댓글이나 메일로 알려주세요.
감사합니다 :)

자세한 내용은 아래 사이트를 참조하세요.
출처: https://gbsb.tistory.com/80
출처: https://medium.com/@euncho/robots-txt-e08328c4f0fd
출처: https://support.google.com/webmasters/answer/6062596?hl=ko
출처: https://ko.wikipedia.org/wiki/%EB%A1%9C%EB%B4%87_%EB%B0%B0%EC%A0%9C_%ED%91%9C%EC%A4%80

webcrawling

python의 request 모듈을 사용하여 http request/resopnse 확인하기

requests 모듈

  1. http request/response를 위한 모듈
  2. HTTP method를 메소드 명으로 사용하여 request 요청 예) get, post
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import requests
# get 방식
url = 'https://news.v.daum.net/v/20190728165812603'
resp = requests.get(url)
resp.text

# post 방식
url = 'https://www.kangcom.com/member/member_check.asp'
data = {
'id': 'testid',
'pwd': 'password'
}

resp = requests.post(url, data=data)
resp.text

HTTP header 데이터 이용하기

  1. header 데이터 구성하기
  2. header 데이터 전달하기
1
2
3
4
5
6
7
url = 'https://news.v.daum.net/v/20190728165812603'
headers = {
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
}

resp = requests.get(url, headers=headers)
resp.text

HTTP response 처리하기

  1. response 객체의 이해
  2. status_code 확인하기
  3. text 속성 확인하기
1
2
3
4
5
6
url = 'https://news.v.daum.net/v/20190728165812603'
resp = requests.get(url)
if resp.status_code == 200:
resp.headers
else:
print('error')

BeautifulSoup의 find와 find_all 함수

  1. find 함수
    • 조건에 만족하는 하나의 tag만 검색
    • 특정 html tag를 검색
    • 검색 조건을 명시하여 찾고자하는 tag를 검색
1
2
3
4
5
6
7
8
tag = soup.find('h3')
tag.get_text()

tag = soup.find('p')
tag.get_text()

tag = soup.find('div', id='upper')
tag.get_text().strip()
  1. find_all함수

    • 조건에 맞는 모든 tag를 리스트로 반환합니다.
  2. get_text 함수

    • tag안의 value를 추출
    • 부모tag의 경우, 모든 자식 tag의 value를 추출
  3. attribute 값 추출하기

    • 경우에 따라 추출하고자 하는 값이 attribute에도 존재함
    • 이 경우에는 검색한 tag에 attribute 이름을 [ ]연산을 통해 추출가능
    • 예) div.find(‘h3’)[‘title’]
1
2
tag = soup.find('h3')
tag['title']

CSS의 select_one과 select 함수

  • CSS를 이용하여 tag 찾기
    • select, select_one함수 사용
    • css selector 사용법
      • 태그명 찾기 tag
      • 자손 태그 찾기 - 자손 관계 (tag tag)
      • 자식 태그 찾기 - 다이렉트 자식 관계 (tag > tag)
      • 아이디 찾기 #id
      • 클래스 찾기 .class
      • 속성값 찾기 [name=’test’]
        • 속성값 prefix 찾기 [name ^=’test’]
        • 속성값 suffix 찾기 [name $=’test’]
        • 속성값 substring 찾기 [name *=’test]
      • n번째 자식 tag 찾기 :nth-child(n)

webcrawling

※ 출처 : fast campus 머신러닝 인강(변영효 강사님)

  • 일부 내용만 발췌하였고, 기본적인 개념 및 추가내용을 확인하시려면 인강 수강을 권장드립니다.

  • 내용요약

    1. 웹사이트에서 원하는 정보의 태그를 파악
    1. 모듈을 통해 태그를 찾은 후 원하는 값을 가져옴

2. HTML(Hyper Text Markup Language)

  • 웹 사이트를 생성하기 위한 언어로 문서와 문서가 링크로 연결되어 있고, 태그를 사용하는 언어

  • 태그 : HTML 문서의 기본 블락

  • 브라우저에 어떻게 렌더링(화면에 표시)될지 전달

  • <태그명 속성1=”속성값1” 속성2=”속성값2”>Value</태그명>

  • <태그명 속성1=”속성값1” 속성2=”속성값2”/>

  • p 태그 : paragraph tag

    한 문단으로 표시해주는 태그

  • div 태그

    그룹핑을 하는 태그
  • 대부분의 crawling은 태그 안에 있는 값을 추출하는 작업입니다.

  • html 기본구조

BeautifulSoup test

Contents Title

Test contents

Test Test Test 1

Test Test Test 2

Test Test Test 3

웹 사이트에서 본인에게 필요한 정보를 가져오는 실습을 해보는걸 추천드립니다.

webcrawling

1. 개발자 도구를 활용한 웹페이지 분석

  • chrome 기준

  • 웹 브라우저 : html로 작성된 내용을 user(사람들)가 보기 쉽게 랜더링 해주는 기능을 함

  • Elements 탭

  • 원하는 데이터로 이동하는 기능을 사용

  • 엘레먼트 탭 : 왼쪽 상단에 있음, 원하는 데이터를 클릭했을 때 어떤 테그와 어떤 속성을 가지는지 표시해주는 역할을 함

  • 어떤 태그와 속성을 가지는지 먼저 파악해야 함

  • Network 탭

  • Preserve log : 체크 시, 로그가 지워지지 않고 유지됨

  • 브라우저가 서버에 요청되는 모든 요청을 로그함

  • url 확인 가능

  • 요청이 많은 이유 : 이미지 등은 첫번째 요청에 한번에 오지 않고, 따로 요청하여 받아옴

  • 처음엔 기본적인 데이터만 넘기고, 나머지 데이터는 브라우저에서 ajax 등의 기술을 이용해서 비동기적으로 가져갈 수 있도록 함

  • HTTP(Hyper Text Transfer Protocol) : HTML 문서 등의 리소스를 전송하는 프로토콜(규약)

  • 클라이언트(user가 사용하는 브라우저)가 서버에 HTTP 요청(Get, Post 등)

  • 서버에서 클라이언트로 HTTP 응답을 함

  • Get 요청 : 데이터를 url에 포함하여 전달(주로 리소스 요청에 사용), 정보의 공유가능

  • Post 요청 : 데이터를 Form data에 포함하여 전달(주로 로그인에 사용)

  • rendering(렌더링) : html을 받아 사용자(사람들)이 볼 수 있도록 출력해주는 작업