이거 웹 스크래핑이 되지 않는데 이유를 몰겠습니다ㅠㅠ

rooneei의 이미지

import requests
from bs4 import BeautifulSoup
 
url = "https://search.daum.net/search?w=img&nil_search=btn&DA=NTB&enc=utf8&q=고양이%20상"
response = requests.get(url)
response.raise_for_status()
 
soup = BeautifulSoup(response.text, "lxml")
 
images = soup.find_all("img", attrs={"class" : "thumb_img"})
 
for image in images:
    print(image["src"])

왜 안되는 걸까요,....

chanik의 이미지

URL을 requests.get()한 결과물은, URL을 브라우저로 띄운 결과물과는 좀 다른 모습이네요.

print(soup) 해서 HTML을 잘 살펴보시면 이미지검색 결과가 태그들로 만들어져 있지 않고 자바스크립트 내의 리스트 형태로 나옵니다. 태그가 없는 상태이므로 soup.find_all()이 아무것도 못찾게 되는 것이죠.

이 상태에서도 이미지 주소들은 나오니 정규식을 써서 아래와 같이 한다든지 해서 추출하시면 되겠습니다. 정규식은 대충 만든 것이니 목적에 맞게 다듬어 쓰시고요.

import re
#images = soup.find_all("img", attrs={"class" : "thumb_img"})
images = re.finditer('oimgurl: "([^"]+)"', str(soup))
 
for image in images:
    #print(image["src"])
    print(image.group(1))

이렇게 만든 이미지 목록이 브라우저로 띄운 이미지 목록과 다르다면, selenium 등으로 브라우저를 통해 soup 내용물을 확보해서 원래대로 태그를 찾으셔도 되겠습니다.