Beautifulsoup으로 이미지 크롤링 안될 때 다른 방법으로 크롤링하기

이미지 태그나 클래스명 등으로 크롤링 하려는데 안될 때 어떻게 해야할까?

여러가지 방법이 있겠지만 이번 글에서는 python, re(정규식) 모듈, requests 모듈을 이용해서 크롤링을 해보려고한다
다음 이미지에서 강아지를 검색하면 브라우저 검색창에 아래 url이 나온다

1
https://search.daum.net/search?w=img&nil_search=btn&DA=NTB&enc=utf8&q=%EA%B0%95%EC%95%84%EC%A7%80

이 url을 이용해서 python으로 request를 날려보자
아래 사진을 보면 이미지 불러오는 url이 보인다 저 url을 정규식으로 추줄해보자
더 좋은 정규식이 있을 텐데 저는 저렇게 해서 추출했습니다
(정규식 내용은 분량이 큽니다 관심이 있으면 따로 찾아보자)
code url

  1. 코드를 보자 정규식을 선언하고
  2. url을 뽑아내는 전처리 작업을하고
  3. 이미지를 저장하는 코드룰 볼 수 있다
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
import requests
import re
import time

t1 = time.time()
# 정규식 선언
reg = re.compile('oimgurl: ".{0,300}", cpid')

url = 'https://search.daum.net/search?w=img&nil_search=btn&DA=NTB&enc=utf8&q=%EA%B0%95%EC%95%84%EC%A7%80'
html = requests.get(url=url)
html_raw_data = str(html.content)

reg_iter = reg.finditer(html_raw_data)

#url 이미지를 저장하는 함수
def save_img(idx, img_url):
res = requests.get(img_url).content
with open(f'{idx}.jpg', 'wb') as f:
# 이미지 관련 작업은 pillow 모듈을 사용하는게 좋다
# 예제에서는 사용 안함 (따로 설치가 필요)
f.write(res)
print(f'save {idx}')

for idx, res_data in enumerate(reg_iter):
# url 을 뽑아내는 전처리 작업
img_url = res_data.group().split('oimgurl:')[1].split(', cpid')[0].replace('"', '')
save_img(idx, img_url)

t2 = time.time()

print(t2-t1)

이렇게 하면 이미지가 저장되는 걸 볼 수 있다
강아지 이미지
작업이 4초 넘게 걸렸는데 다음 포스트에서는 thread 와 비동기 함수를 사용하여
작업 시간을 단축시키는 포스트를 올려보겠습니다

Beautifulsoup으로 이미지 크롤링 안될 때 다른 방법으로 크롤링하기

http://hyunsuk2.github.io/2021/02/25/python-row-crawling/

Author

HyunSuk

Posted on

2021-02-25

Updated on

2023-12-23

Licensed under

댓글