참고사이트

파이썬 웹 크롤링(Web Crawling) - 3. 검색결과에 따른 페이지 크롤링

예제 1) 네이버 블로그 검색결과 가져오기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from urllib.request import urlopen
from bs4 import BeautifulSoup as bs
import urllib.parse


# 네이버 검색 후 검색 결과
baseUrl = 'https://search.naver.com/search.naver?where=post&sm=tab_jum&query='
plusUrl = input('검색어를 입력하세요 : ')
# 한글 검색 자동 변환
url = baseUrl + urllib.parse.quote_plus(plusUrl)
html = urlopen(url)
bsObject = bs(html, "html.parser")

# 조건에 맞는 파일을 다 출력해라
title = bsObject.find_all(class_='sh_blog_title')


for i in title:
print(i.attrs['title'])
print(i.attrs['href'])
print()

결과

검색어를 입력하세요 : 크롤링
웹크롤링 [금통위의사록 파이썬으로 다운받기]
https://blog.naver.com/jjys9047?Redirect=Log&logNo=221584977592

웹 구조를 이해한 자의 웹크롤링은 데이터를 다루는 디테일부터 다르다. By >파이썬을 활용한 실전 웹크롤링과 자동화 CAMP 박두진 강사님
http://blog.fastcampus.co.kr/221586197326

[Week 1] 데이터 사이언스 기초: 웹페이지에서 데이터 수집하기 (데이터 크롤링)
https://piry777.blog.me/221662360000

[파이썬 활용] 크롤링
https://blog.naver.com/mathesis_time?Redirect=Log&logNo=221525076829

▣ 웹크롤링 / 스크래핑 프로그램 OCTOPARSE 사용기
https://blog.naver.com/no1_devicemart?Redirect=Log&logNo=221539107537

발리 여행, 길리 트라왕안, 파티섬, 펍 크롤링, Pub Crawling 후기
https://blog.naver.com/grang353?Redirect=Log&logNo=221576202119

광고,홍보 위주로 활용이 가능한 웹크롤링 젠서버 컴퓨터 입니다.
https://blog.naver.com/kukuri0_0?Redirect=Log&logNo=221510474601

[Python] 파이썬 웹 크롤링 #1. 네이버 실시간 검색어 가져오기
https://dsz08082.blog.me/221587474567

10.1 R로 다음(Daum) 네티즌 리뷰 크롤링하기
https://blog.naver.com/pmw9440?Redirect=Log&logNo=221590746010

에브리타임 자동 크롤링 / 봇 시스템
https://blog.naver.com/kbs4674?Redirect=Log&logNo=221460241196

cf) 여러 페이지 블로그 게시물 가져오기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from urllib.request import urlopen
from bs4 import BeautifulSoup as bs
from urllib.parse import quote_plus

plusUrl = quote_plus(input('검색어를 입력하세요 : '))
pageNum = 1
count = 1

url = f'https://search.naver.com/search.naver?date_from=&date_option=0&date_to=&dup_remove=1&nso=&post_blogurl=&post_blogurl_without=&query={plusUrl}&sm=tab_pge&srchby=all&st=sim&where=post&start={pageNum}'

i = input('몇 페이지를 크롤링 할까요? : ')
lastPage = int(i) * 10 - 9
while pageNum < lastPage + 1:
url = f'https://search.naver.com/search.naver?date_from=&date_option=0&date_to=&dup_remove=1&nso=&post_blogurl=&post_blogurl_without=&query={plusUrl}&sm=tab_pge&srchby=all&st=sim&where=post&start={pageNum}'
html = urlopen(url)
soup = bs(html, "html.parser")

# 조건에 맞는 파일을 다 출력해라
title = soup.find_all(class_='sh_blog_title')

print(f'---{count}페이지 결과입니다 --------')
for i in title:
print(i.attrs['title'])
print(i.attrs['href'])
print()
pageNum += 10
count += 1

예제 2) 네이버 이미지 검색결과 저장하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from urllib.request import urlopen
from bs4 import BeautifulSoup as bs
from urllib.parse import quote_plus

baseUrl = 'https://search.naver.com/search.naver?where=image&sm=tab_jum&query='
plusUrl = input('검색어를 입력하세요 : ')
# 한글 검색 자동 변환
url = baseUrl + quote_plus(plusUrl)
html = urlopen(url)
soup = bs(html, "html.parser")
img = soup.find_all(class_='_img')

n = 1
for i in img:
imgUrl = i['data-source']
with urlopen(imgUrl) as f:
with open('./img/' + plusUrl + str(n)+'.jpg','wb') as h: # w - write b - binary
img = f.read()
h.write(img)
n += 1
print('다운로드 완료')

예제 3) 인스타그램 해시태그 검색 시 이미지 다운로드하기

Crome Driver 설치 링크

cf) Chrome 버전과 맞는 Crome Driver 설치를 해야합니다. (맞지 않으면 오류))

instagram은 javascript 기반의 환경이므로 BeautifulSoup으로 크롤링이 불가합니다.

-> selenium 사용

1
pip install selenium
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
from urllib.request import urlopen
from bs4 import BeautifulSoup as bs
from selenium import webdriver
from urllib.parse import quote_plus
import time


baseUrl = 'https://www.instagram.com/explore/tags/'
plusUrl = input('검색할 태그를 입력하세요 : ')
# 한글 검색 자동 변환
url = baseUrl + quote_plus(plusUrl)

# Crome 드라이버 지정
driver = webdriver.Chrome()
driver.get(url)

#
time.sleep(3)

html = driver.page_source
soup = bs(html, "html.parser")

insta = soup.select('.v1Nh3.kIKUG._bz0w') # 태그
# print(insta[0]) # 한개 데이터만 가지고와라
n = 1
for i in insta:
print('https://www.instagram.com' + i.a['href'])
imgUrl = i.select_one('.KL4Bh').img['src']
with urlopen(imgUrl) as f:
with open('./img/' + plusUrl + str(n)+'.jpg','wb') as h:
img = f.read()
h.write(img)
n += 1
print(imgUrl)
print()
driver.close()

(저장된 이미지는 모자이크 처리 했습니다.)

인스타그램에 해시태그로 #현수쓰를 검색해서 나온 결과값입니다