지난 번 네이버 블로그 크롤링과 유사하게 네이버에서 키워드 검색 후 관련 뉴스 기사 크롤링을 실습해 본다. 마찬가지로 처음에는 자동검색을 통해 url들을 수집한 뒤 pandas로 데이터프레임화 한 후 csv로 저장한다. 그 다음 csv를 로드한 뒤 url을 하나씩 열어 기사 본문과 댓글, 좋아요 등의 감정 수집까지 진행한다. 역시나 처음에는 전체 구조를 for문으로 만들기 전에 하나의 기사로 코드를 실험한다. 0. 라이브러리 & 모듈 - Selenium ActionChains : 여러 개의 동작을 체인으로 묶어서 저장하고 실행한다. - re : 정규표현식을 사용할 수 있는 모듈 # 라이브러리 import import pandas as pd import numpy as np from selenium imp..
환경준비 파이썬(3.5, 3.6), selenium, BeautifulSoup from bs4 import BeautifulSoup # html 데이터를 전처리 from selenium import webdriver # 웹 브라우저 자동화 from selenium.webdriver.common.keys import Keys import chromedriver_autoinstaller import time # 서버 통신 시 시간 지연 0. 크롬창 띄우기 driver = webdriver.Chrome("chormedriver.exe") # 크롬 드라이버 로드(윈도우 기준, mac은 절대경로) dirver.get(url) # url 입력 ※ 크롬 드라이버 autoinstaller 이용 chrome_path =..
지난 포스팅에서는 selenium을 이용해 네이버 검색어를 자동으로 입력해서 블로그 제목과 url을 크롤링 해봤다. 이번에는 지난 포스팅에서 저장한 excel 파일을 불러와서 블로그 내용까지 크롤링하는 연습이다. 모듈&라이브러리 import sys import os import pandas as pd import numpy as np 파일 로드 후 확인 # "url_list.xlsx" 불러오기 url_load = pd.read_excel("blog_url.xlsx") url_load = url_load.drop("Unnamed: 0", axis=1) # 불필요한 칼럼 삭제 num_list = len(url_load) print(num_list) url_load 2. 크롬 드라이버 실행 및 url 입력 -..
첫번째 크롤링 예제이다. 네이버 블로그에 검색어 입력 후에 나오는 블로그들을 크롤링하고 저장해본다. 검색어를 입력하고 스크롤까지 누르기 때문에 Selenium 모듈을 사용한다. (사실 selenium만 배운상태...) selenium의 장점은 다음 블로그를 참조하였다. https://www.hanumoka.net/2020/07/05/python-20200705-python-selenium-install-start/ Selenium 설치하기 및 크롤링 예제 들어가기python으로 크롤링을 할 때, 크롤링 대상인 웹 페이지에 동적인 동작을 곁들여서 크롤링을 할 수 있게 도와주는 라이브러리가 있는데, 그것이 selenium 이다. selenium 장점 웹 드라이버를 사 www.hanumoka.net 0. 모듈..
딕셔너리(dictionary) 리스트와 유사하지만 항목의 순서를 따지지 않는다 → 인덱스로 값을 찾을수 없다 대신 값(value)과 이에 상응하는 키(key)를 지정한다 → 키-값이 쌍으로 이루어진 객체들이 저장 딕셔너리는 변경 가능하므로 key, value는 모두 추가,삭제,수정할 수 있다 딕셔너리 vs 리스트 리스트 : 아이템 정렬이 필요할 때 (인덱스 개념 등 사용가능) 딕셔너리 : key와 value 가 서로 연관되어 있거나 key를 사용하여 어떤 값을 찾을 때 1. 딕셔너리 생성 : {} 딕셔너리 생성에는 중괄호 {} 를 사용하며 그 안에 콤마로 구분된 key:value 쌍을 지정한다 ice = {'메로나':1000,'폴라포':1200,'빵빠레':1800} print(ice) {'메로나': 10..
튜플(Tuple) 수정이 불가능한 리스트 추가, 제거 등의 함수가 당연히 없고 사용 가능한 함수도 매우 적다 리스트보다 더 적은 메모리를 차지하고 변경되지 않는 리스트를 만들고 싶을 때 사용한다 딕셔너리의 키로 사용 가능 하다 1. 튜플 생성 : 괄호 tuple1 = () 하나의 요소를 가지는 tuple1 = (1,) -> (1)은 정수로 인식한다 my_variable=() # 빈 튜플 생성 print(my_variable) () one = (1,) # 원소가 하나인 튜플 생성 one (1,) 2. 튜플 언패킹 한 번에 여러 변수를 할당한흔 것 temp = ('apple', 'banana', 'cake') a, b, c = temp print(a, b, c) apple banana cake
값을 이용하여 리스트 정렬하기 list.sort() : 리스트 자체를 내부적으로 정렬 -> 리스트 원본 자체가 바뀜 sorted(list) : 리스트의 정렬된 복사본을 반환 -> 리스트 원본 자체는 바뀌지 않음 : 복사본을 받을 변수 필요 data = [2, 4, 3, 1, 5, 10, 9] data.sort() print(data) [1, 2, 3, 4, 5, 9, 10] data = [2, 4, 3, 1, 5, 10, 9] data2 = sorted(data) print(data2) [1, 2, 3, 4, 5, 9, 10] 내림차순 정렬 : reverse = True 인자 추가
split('구분자') : 구분자를 기준으로 하나의 문자열을 작은 문자열들의 리스트로 나눔 -> '구분자'.join() 과 반대 string = "삼성전자/LG전자/Naver" interest = string.split('/') print(interest) ['삼성전자', 'LG전자', 'Naver']
'구분자'.join() : 문자열 리스트를 하나의 문자열로 결합 -> split() 함수와 반대 구분자로 문자열 결합 string = ['a','b','c'] print("/".join(string)) a/b/c 문자열이 아니면 사용 불가 integer = [1,2,3] print("/".join(integer)) --------------------------------------------------------------------------- TypeError Traceback (most recent call last) ~\AppData\Local\Temp/ipykernel_2368/2443994539.py in 1 integer = [1,2,3] ----> 2 print("/".join(integ..
문자열 포매팅 : 데이터 값을 문자열에 끼워넣는 방법 1. %서식 기호 string % data 문자열 안의 %수는 % 뒤의 데이터 항목의 수와 일치해야 함 -> %가 나타난 순서대로 데이터 제공 단일 데이터 항복은 %바로 뒤 여러 데이터 항목은 튜플로 묶어서 나타냄 actor = 'Emma Stone' dog = 'shepherd' weight = 32 print("My favorite actor is %s"% actor) print('My dog %s is weighs %dkg' % (dog,weight)) My favorite actor is Emma Stone My dog shepherd is weighs 32kg 정렬과 필드설정 문자열 내의 % 다음에 타입 지정자 입력 %10s : 최소 10자의..