python BeautifulSoup을 이용해 이미지주소 가져오기

vector13·2021년 8월 4일
0

크롤링을 하려는 대상이 태그에 담긴 내용이 아니라 태그의 속성에 있는 이미지주소일 경우,

예를 들어서
class "1a" 를 가진 span 태그의 하위 img 태그의 src속성인 "https://www. ~ . " 의 내용을 가져오고 싶을 때 사용하는 방법.

접근 방식

1. 크롤링 대상에 대한 정보 파악.

만일 find("태그이름, 여기선img") 와 get("속성이름, 여기선 src")만을 이용해서 할 경우 가장 첫번째 관측되는 태그의 src속성만 가져오게 되므로, 가장 첫번째 존재하는 img의 src가 내가 찾는 것이 맞는지 파악하기

2. 그 태그나 상위태그의 속성을 파악하기.

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")로 속성에 접근한다.

↓ 결과물 ↓

profile
HelloWorld! 같은 실수를 반복하지 말기위해 적어두자..

0개의 댓글