크롤링을 하려는 대상이 태그에 담긴 내용이 아니라 태그의 속성에 있는 이미지주소일 경우,
예를 들어서
class "1a" 를 가진 span 태그의 하위 img 태그의 src속성인 "https://www. ~ . " 의 내용을 가져오고 싶을 때 사용하는 방법.
접근 방식
만일 find("태그이름, 여기선img") 와 get("속성이름, 여기선 src")만을 이용해서 할 경우 가장 첫번째 관측되는 태그의 src속성만 가져오게 되므로, 가장 첫번째 존재하는 img의 src가 내가 찾는 것이 맞는지 파악하기
1이 맞다면 바로 find()와 get()을 이용해서 하고
좀 더 밑에 있는 img 태그의 src가 필요하다면 그 태그나 상위태그의 속성을 파악하기.
(여기서는 img 태그의 상위태그는 span이고 class 가 "1a"인 것으로 가정" )
코드를 살펴보면
import csv
from bs4 import BeautifulSoup
from urllib.request import urlopen
f = open("주소모음리스트.txt", 'r')
lines = f.readlines()
f.close()
# print(lines) #lines 변수에 리스트로 저장되어있음
rs = ['', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '']
# len(rs) #70
f = open(f'저장할파일명 예로 file2'.csv', 'w', encoding='utf-8', newline='')
csvWriter = csv.writer(f)
for i in range(0, len(rs)):
rs[i] = '접근할대표주소' + lines[i]
with urlopen(rs[i]) as response:
soup = BeautifulSoup(response, 'html.parser')
#이미지주소
for anchor in soup.select(".1a"):
anchor = anchor.find("img")
anchor = anchor.get("src")+"\n"
print(anchor)
f.write(anchor)
f.close()
이전에 만들어둔 주소모음 리스트를 f = open("주소모음리스트.txt", 'r')로 접근하고, 리스트에 저장된 개수만큼 빈 리스트 rs를 만들고
나는 csv로 저장할 것이기 때문에 저장할파일명, 예로 file2라고 설정
f = open(f'file2'.csv', 'w', encoding='utf-8', newline='')
로 csvwriter를 이용해서 작성한다.
그다음 bs를 이용해서 접근하는데 css태그의 특성을 잘 파악해서
soup.select(".1a") "1a"라는 class를 가진 태그에 접근해
find("img") : 하위img 태그를 접근하고 get("src")로 속성에 접근한다.
↓ 결과물 ↓