[2024 개정판] 이것이 진짜 크롤링이다 - 실전편

cse 23·2024년 7월 18일
0

형제선택자

: 동일한 부모를 가진 요소들 중에 특정 요소를 선택하는데 사용

-인접형제 선택자(A+B)
-일반 형제 선택자(A-B)

:nth-of-type()선택자(중요함)

:특정 유형의 요소 중 특정 순서에 해당하는 요소를 선택할때 사용

ex) div.main >a.nth-of-type(3)

:not(X) 선택자

:특정 선택자(X)와 매칭되지 않는 요소를 선택할 때 사용

a:not(#fancy)
div:not(.big,.medium)

속성선택자

:특정 속성을 기준으로 HTML요소를 선택할때 사용
-기본 속성 선택자
-특정 값이 있는 속성 선택자 [for]
-특정 값으로 시작되는 속성 선택자 [for ^="값"]
-특정 값으로 끝나는 속성 선택자 [for $="값"]
-특정 값을 포함하는 속성 선택자 [for *="값"]

css연습!!!

https://flukeout.github.io/

fins,find_all명령어

:선택자는 텍스트를 기준으로 찾는 기능을 제공하지 않음

텍스트와 똑같은 태그 하나 찾기
soup.find('태그이름',string='텍스트')
텍스트와 똑같은 태그 여러개 찾기
soup.find_all('태그이름',string='텍스트')

fins,find_all명령어-정규 표현식 사용

정규 표현식: 특정 문자를 찾기 위한 패턴

-텍스트를 포함하는 태그 하나 찾기
soup.find('태그이름',string=re.compile('텍스트'))
re:정규표현식
compile: 패턴을 해석함

-텍스트를 포함하는 태그 여러개 찾기
soup.find_all('태그이름',string=re.compile('텍스트'))

-텍스트로 시작하는 여러개 찾기
soup.find('태그이름',string=re.compile('^텍스트'))
-텍스트로 끝나는 여러개 찾기
soup.find('태그이름',string=re.compile('텍스트$'))

정적페이지 크롤링 실전 예제

1.네이버 증권 데이터 크롤링
-제목,상세페이지링크, 내용,언론사,날짜를 엑셀에 저장해 보내주세요!

파라미터 종류가 많은 경우 꿀팁

1.구글 개발자 도구에서 파라미터를 복사
2. 딕셔너리로 만든다음 요청할때 같이 보냄

상세페이지 크롤링 하는 방법

1.for문 안쪽에서 추가로 요청을 보낼수 있음
2. 목록에서 크롤링한 링크로 상세 페이지를 요청

선택자 할떄 띄어쓰기있으면 띄어쓰기 앞이나 뒤 중 (개수)맞는거 사용

디버깅
:문제를 해결하는 과정
1.문제가 발생한 이유 찾아보기

서버의 요청 거절에 대한 case(정적 페이지 크롤링시 발생)

1.상태코드 200-> 응답받은 html이 올바르지 않음
2.상태코드 400번대 -> 거절
3. 무한 루프

헤더: 내가 누군지 알려주는 정보

헤더가 필요한 경우
:서버쪽에서 요청을 거절할떄 필요한정보(헤더)를 같이 날려준다.

  • 'User-Agent' : 'Mozilla/5.0'
  • 'Referer' : 'URL 주소값'
    ->어디서 요청을 보내는지(복사해서 사용)

SSL 오류 해결하기

:여러번 반복해서 실행시 오류가 발생
해결방법: SSL인증을 비활성화하기
requests.get에 옵션추가하기 -> verify = False
ex) response = requests.get(link,headers=header,verify = False)

{경고매세지 꺼라}

import urllib3
urllib3.disable_warnings()

result =[]
for keyword in keywords:
result.append(keyword.strip())

이 세줄을 리스트 내포(List Comprehension)으로 한줄로 줄이기 가능 ->압축시킨 문법임 =[표현식 for문]

keywords = [keyword.strip() for keyword in keywords]

텍스트를 기준으로 찾기

.find_next_sibling() :바로 옆 태그 찾아줌
EX) press = soup.find('span',string ='발행기관').find_next_sibling().text

셀레니움 실전 테크닉

  • 동적 페이지 크롤링 방법
    -스크롤 처리 방법
    -동적 페이지 크롤링 예제

리다이렉션

웹에서 리다이렉션이란 사용자가 브라우저를 자동으로 다른 URL로 이동시키는 과정
-URL변경
-사이트 유지보수
-HTTPS로의 강제 이동

By클래스

: 웹 페이지의 태그를 찾을떄 사용할수 있는 다양한 방법

driver.find_element() :웹페이지에서 첫번째로 일치하는 태그를 찾아서 반환
(만약 일치하는 태그가 없다면 noSuchElementException반환함)

[for]:속성 선택자

웹드라이버는 한번에 하나의 페이지만 제어할수 있음
-이러한 경우,서브 페이지를 바라볼수 있도록 드라이버를 전환시켜 준 다음에 서브페이지를 제어함

iframe :HTML에서 한 웹페이지 안에 다른 웹페이지를 포함시킬때 사용하는 태그

동적페이지에서 알맹이는 자바스크립트가 채워줌
자바스크립트: 웹 브라우저에서 동작하는 언어
HTML생성,수정,삭제 담당 -> 자바스크립트를 동작하려면 웹페이지를 실행해야함

scroll 전,스크롤 높이 확인
scroll 내리기 <-
scroll후 스크롤 높이 확인
scroll 전,후 높이가 같은가? ->scroll전 높이=scroll후 높이
종료

셀레니움은 화면에 보이는 태그만 제어할수 있음.

GUI프로그래밍(Graphical User Interface)
:사용자가 프로그램을 편리하게 사용할수 있도록 그래픽으로 나타낸것
ex)탐색기

프로그래밍하는 이유
1.간지난다
2.눈이 즐겁다
2. 즐겁다

1.프로그램을 사용하기 편리해진다
2.다른사람도 쉽게 프로그램을 사용할수 있다
3.외주 결과물을 프로그램 형태로 제공

사전 준비물
1.클래스와 객체 문법에 대한 이해

클래스 : 제품의 설계도
객체: 설계도로 만든 작품
속성: 클래스 안의 변수
메서드 : 클래스 안의 함수
생성자 ; 객체를 만들떄 실행되는 함수

class 클래스 이름:
def 메서드이름(self):
print("명령블록")

ex)
class monster:
def say(self):
print("나는 뿌링클 괴물이다.")

객체 = 클래스이름()
객체.메서드()

생성자(init)
magic method
:특정 시점에 실행되는 함수

class 클래스 이름:
def init(self):
print("명령블록")

속성 추가하기

class 클래스 이름:
def init(self,name):
self.monster_name = name
def say(self):
print(f"나는{self.monster_name}(이)다!")

객체.() = 메서드를 호출하는것
객체. = 괄호 없으면 속성가져오는것

PyQT vs PySide
PyQT :상업적 이용시 라이센스 필요
PySide: 상업적 이용시 라이센스 필요없음

PySide6

.py 파일 : 기본 파이썬 확장자

QApplication: Qt어플리케이션 기본 객체 / 어플리케이션 설정 관리 담당
QWidget:Qt 기본창 클래스

1) 질문을 만들어 내기가 어렵다
2)만들어진 코드 사용법을 모른다
3)오류 해결이 어렵다

기초문법 + 활용방법 -> 챗지피티 이용한 프로그램 작성

언어모델
: 인공지능이 언어를 이해하고 생성하는 방법을 학습하는 시스템

코딩에서 챗지피티 활용방법 4가지
*파이썬 문법에서의 활용
1.명령어 질문하기
2.오류 수정하기
3.코드 생성하기
4.코드 리뷰하기

외주개발이 3배 쉬워지는 프롬프트 작성법 6단계
프롬프트 : 인공지능에게 하는 질문

  1. 작업: AI에게 수행할 작업을 명확하게 제시
    2.맥락 : 배경이나 상황정보를 제공
  2. 예시: 출력유형을 이해할수 있도록 구체적인 예시를 제공
  3. 페르소나 : 특정 역할을 부여
    5.형식 : 원하는 출력형식을 지정
    6.어조 : 응답의 분위기가 스타일을 정의
  • 웹크롤링에서의 활용
    라이브러리 명렁어 학습(requests , bs4, selenium)
    오류에 대한 해결방법
    코드 생성,리뷰
    간단한 정적 페이지라면 지피티 만으로 크롤링 코드 작성하가능
    복잡한 동적 페이지라면 지피티 만으로 크롤링 코드를 작성하기 어려움

HTML분석 + 데이터 전처리
3.5 -> HTML 일부분석
4 -> HTML 전체 분석

외주 : 다른 사람의 능력,재능을 대가를 지불하고 구매하는 행위
프로그램 개발 외주

1단게: 자신이 필요한 프로그램을 제작(크몽)
무엇을 만들지 생각이 안날떄 다른 사람들이 만든 자동화 프로그램을 카피해봄

2단계 : 주변 지인에게 프로그램 무료 제작
무료다 보니 못만들까봐 걱정할 필요가 없다.

-> 포트폴리오가 생김

3단계 : 온라인 마케팅 후 외주 받기
-개인 sns마케딩
-침투 마케팅

나만 알고싶은 효과적인 마케팅 루트 ->네이버 블로그

0개의 댓글