1. 인스타그램 크롤링¶
1) 네이버 카페 접근하기¶
In [18]:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
path='../../driver/chromedriver.exe'
driver = webdriver.Chrome(service=Service(path))
In [19]:
driver.get('https:www.naver.com')
1-1) 네이버 홈페이지에서 네이버 카페로 접근¶
- F12 후 '카페' 배너 클릭하여 우클릭 > copy > copy Xpath
In [20]:
# 첫번째 방법
driver.get('http:www.naver.com')
element = driver.find_element(By.XPATH,"""//*[@id="shortcutArea"]/ul/li[2]/a/span[1]""") # By.XPATH , By.CLASS_NAME
element.click()
In [21]:
# 두번째 방법
driver.get('http:www.naver.com')
element = driver.find_element(By.CLASS_NAME,"service_icon.type_cafe")
element.click()
In [5]:
driver.close()
2) 인스타그램 접속¶
In [57]:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
path='../../driver/chromedriver.exe'
driver = webdriver.Chrome(service=Service(path))
- 인스타그램 로그인을 위해 계정 아이디/비번 입력이 필요
In [58]:
import time
# 인스타그램 접속
driver.get('https://www.instagram.com')
time.sleep(2)
- 위 코드 실행 후 인스타그램 로그인이 완료되어야 함
- 추가로, 2단계 인증이 필요하다고 나올 경우 인증까지 완료
2-1) 인스타그램 검색결과 URL 만들어서 접속하기¶
In [59]:
def insta_searching(word):
url = 'https://www.instagram.com/explore/tags/' + word
return url
In [60]:
word = '울릉도'
url = insta_searching(word)
driver.get(url)
In [61]:
word = '제주도맛집'
url = insta_searching(word)
driver.get(url)
2-2) 첫 번째 게시물 열기¶
In [63]:
def select_first(driver):
first = driver.find_element(By.CSS_SELECTOR, "div._aabd")
first.click()
time.sleep(5)
select_first(driver)
2-3) 게시글 정보 가져오기¶
In [64]:
# 게시글 정보 가져오기
import re
from bs4 import BeautifulSoup
import unicodedata
def get_content(driver):
# 현재 페이지 html 정보 가져오기
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')
# 본문 내용 가져오기
try:
content = soup.select('div._a9zs')[0].text
content = unicodedata.normalize('NFC', content)
except:
content = ' '
#본문 내용에서 해시태그 가져오기(정규식 활용)
tags = re.findall(r'#[^Ws#,\\]+', content)
# 작성일자 정보 가져오기
# time class 안에 datetime이라는 항목(년월일시분초 있음)에서 10개 string만 보겠다라는 뜻
date = soup.select('time._aaqe')[0]['datetime'][:10]
# 수집한 정보 저장하기
data = [content, date, tags]
return data
get_content(driver)
Out[64]:
['제주도 여행중 필수 먹킷인 흑돼지! 아직도 어디로 가실지 고민된다면 #공항그때그집 그냥 도착하자마자 여기로 가시면됩니다. 여행의 시작을 흑돼지로하면 더욱 성공적이겠죠. 공항근처 흑돼지 참 잘하는집이라 도착후 든든하게 배채워주고 여행하면 일석이조! 바다 근처에 있어서 뷰도 좋아요! 먹는내내 정신적+뱃속 힐링이 동시에 가능한곳이에요.오겹살로만 주문했는데 다음에 가면 목살도 꼭 먹어볼거에요. 고기를 주문하면 소시지랑 고사리, 새우까지 푸짐하게 준비해주십니다! 보기만해도 통통한게 안봐도 맛있는 비줠이쥬? 여기는 기본반찬까지 미쳐요,, 양념게장을 주시는데 진짜 존맛이에요. 김치찌개를 라면사리 넣어서 꼭 꼭 드시구요. 배가 아직 안찼다면 치즈 올라간 볶음밥까지 추천드립니다.▫️제주도 공항그때그집▫️제주 제주시 서해안로 352-1 ▫️11:00~22:00 수휴무 ▫️흑돼지 2인 60,000 #푸돌핀_제주#제주도여행 #제주도맛집 #제주맛집 #제주흑돼지맛집 #제주흑돼지 #제주도흑돼지 #제주도흑돼지맛집 #제주공항근처맛집 #제주공항맛집 #제주공항흑돼지 #노형맛집 #노형동맛집 #흑돼지맛집 #kpop #kfood #foodpics',
'2023-07-05',
['#공항그때그집 그냥 도착하자마자 여기로 가시면됩니다. 여행의 시작을 흑돼지로하면 더욱 성공적이겠죠. 공항근처 흑돼지 참 잘하는집이라 도착후 든든하게 배채워주고 여행하면 일석이조! 바다 근처에 있어서 뷰도 좋아요! 먹는내내 정신적+뱃속 힐링이 동시에 가능한곳이에요.오겹살로만 주문했는데 다음에 가면 목살도 꼭 먹어볼거에요. 고기를 주문하면 소시지랑 고사리',
'#푸돌핀_제주',
'#제주도여행 ',
'#제주도맛집 ',
'#제주맛집 ',
'#제주흑돼지맛집 ',
'#제주흑돼지 ',
'#제주도흑돼지 ',
'#제주도흑돼지맛집 ',
'#제주공항근처맛집 ',
'#제주공항맛집 ',
'#제주공항흑돼지 ',
'#노형맛집 ',
'#노형동맛집 ',
'#흑돼지맛집 ',
'#kpop ',
'#kfood ',
'#foodpic']]
2-4) 다음 게시글 열기¶
In [65]:
def move_next(driver):
right = driver.find_element(By.CSS_SELECTOR, "div._aaqg._aaqh")
right.click()
time.sleep(4)
move_next(driver)
2-6) 정보 수집하기¶
In [71]:
word = "제주도맛집" # 검색어
url = insta_searching(word)
driver.get(url)
time.sleep(7)
# 충분한 시간을 주어야 오류도 안나고 많은 데이터를 가져올 수 있음
select_first(driver) # 첫 번째 게시글 열기
results = [] # 정보 가져올 빈 리스트 선언
target = 30
for i in range(target):
try:
data = get_content(driver)
results.append(data)
move_next(driver)
except:
time.sleep(7)
move_next(driver)
2-7) 수집한 정보 저장¶
In [72]:
import pandas as pd
results_df = pd.DataFrame(results)
results_df.columns = ['content', 'data', 'tags']
results_df.to_excel('../../data/jejudo_crawling.xlsx')
2-8) 여러 엑셀 파일의 중복을 제거한 후 통합 저장¶
In [52]:
jeju_insta_df = pd.DataFrame( [ ] )
folder = '../../data/'
f_list = ['1_crawling_jejudoGwanGwang.xlsx', '1_crawling_jejudoMatJip.xlsx',
'1_crawling_jejuMatJip.xlsx', '1_crawling_jejuYeoHang.xlsx']
for fname in f_list:
fpath = folder + fname
temp = pd.read_excel(fpath)
jeju_insta_df = jeju_insta_df.append(temp)
jeju_insta_df.columns = ['content', 'data', 'like', 'place', 'tags']
C:\Users\Playdata\AppData\Local\Temp\ipykernel_4792\3200292893.py:10: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.
jeju_insta_df = jeju_insta_df.append(temp)
C:\Users\Playdata\AppData\Local\Temp\ipykernel_4792\3200292893.py:10: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.
jeju_insta_df = jeju_insta_df.append(temp)
C:\Users\Playdata\AppData\Local\Temp\ipykernel_4792\3200292893.py:10: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.
jeju_insta_df = jeju_insta_df.append(temp)
C:\Users\Playdata\AppData\Local\Temp\ipykernel_4792\3200292893.py:10: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.
jeju_insta_df = jeju_insta_df.append(temp)
In [55]:
jeju_insta_df.drop_duplicates(subset = ["content"], inplace=True)
jeju_insta_df.to_excel('../../data/1_crawling_raw.xlsx', index=False)
문제¶
In [76]:
import pandas as pd
html = 'http://kopia.or.kr/info/statistics.php'
df=pd.read_html(html)
df[0].to_excel('../../data/quiz.xlsx')
df[0]
Out[76]:
발주지역 및 발주국가 | 수주기업 | 설비구분 | 프로젝트명 | 발주처 | 수주금액 | 수주시기 | |
---|---|---|---|---|---|---|---|
0 | 아시아 중국 | 엘오티베큠 | 기계 | 태양광용 건식진공펌프 | Shenzhen S | 30848 | 2023-05-01 |
1 | 아시아 대만 | LS | 기계 | Greater Changhua Offshore Wind Farm | Orsted Taiwan Limited | 143603 | 2023-05-01 |
2 | 중동 사우디 | HD현대일렉트릭 | 기계 | 380KV급 변압기 및 리액터 18대 | 사우디 전력청(SEC) | 66941 | 2023-05-01 |
3 | 미주 미국 | 우신시스템 | 기계 | Gestamp EV 차체자동화라인 | Wooshin North America, LLC | 16015 | 2023-05-01 |
4 | 아시아 일본 | 아이씨디 | 기계 | FPD 제조장비 | Canon Tokki Corporation | 11441 | 2023-05-01 |
... | ... | ... | ... | ... | ... | ... | ... |
5159 | 아시아 파푸아뉴기니 | 대우건설 | Oil&Gas | 파푸아 뉴기니 LNG 프로젝트 | Esso Highland Ltd | 238900 | 2010-01-20 |
5160 | 아시아 인도 | 한전KPS | 담수&발전 | Wardha 화력 발전소 O&M | Wardha Power Company Pvt. Ltd | 65575 | 2010-01-14 |
5161 | 중동 UAE | 한국전력공사 | 담수&발전 | UAE Nuclear Energy Power Plant | Emirates Nuclear Energy Corporation | 18600000 | 2010-01-08 |
5162 | 유럽 러시아 | 대우조선해양 | 해양 | Arkutun Dagi GBS Topside (Fixed Platform) | 미주 회사 | 324000 | 2010-01-06 |
5163 | 아시아 인도네시아 | 대우엔지니어링 | 담수&발전 | Wampu Hydroelectric Power Project | PT. Wampu Electric Power | 96203 | 2010-01-04 |
5164 rows × 7 columns
반응형
'데이터분석' 카테고리의 다른 글
[23.07.17] 머신러닝(Machine Learning) - 32(1) (0) | 2023.07.18 |
---|---|
[23.07.07] 프로젝트 주제 발표 - 26(1) (0) | 2023.07.07 |
[23.07.05] 데이터 시각화(WordCloud) - 24(1) (0) | 2023.07.05 |
[23.07.04] 데이터 시각화(시계열 분석) - 23(1) (0) | 2023.07.04 |
[23.07.03] 데이터 시각화(인구 소멸) - 22(2) (0) | 2023.07.03 |