정규 표현식과 BeautifulSoup
문자열 매개변수를 받는 대부분의 함수에 정규표현식 사용 가능
ex 제품 이미지 url을 가져오자
.findAll('img')
-> 불필요한 로고, 숨은 이미지, 정렬에 쓰이는 빈 이미지 등이 포함
=> 태그 자체를 식별하는 무언가를 찾기: 제품 이미지 파일경로: ../img/gifts/img
로 시작해서 .jpg
로 끝
from urllib.request import urlopen
from bs4 import BeautifulSoup
import re
html = urlopen('https://www.pythonscraping.com/pages/page3.html')
bs = BeautifulSoup(html,'html.parser')
images=bs.findAll('img',{'src':re.compile('\.\.\/img\/gifts/img.*\.jpg')})
for image in images:
print(image['src'])
import re
로 정규표현식 임포트
속성에 접근하기
태그의 콘텐츠가 아닌 속성에 관심이 있을 때
myTag.attrs
로 태그 객체에서 속성 목록에 접근 가능 (딕셔너리 객체)
ex) 이미지의 소스 위치: myImgTag.attrs[src]
람다 표현식
람다 표현식: 다른 함수에 변수로 전달되는 함수
f(x,y) 이외에 f(g(x),y), f(g(x),h(y))로 정의 가능
BeautifulSoup에서 특정 타입의 함수를 findAll함수에 매개 변수로 넘길 수 있음
이 함수는 반드시 태그 객체를 매개변수로 받고, 불리언만 반환 가능(TF반환하는 어떤 함수여도 상관x)
모든 태그 객체를 이 함수에서 평가하고 True로 평가된 태그는 반환, 그렇지 않으면 버림
ex bs.findAll(lambda tag: len(tag.attrs) == 2
len(tag.attrs) ==2
가 True로 평가되면 findAll함수가 그 태그를 반환
결과: <div class='body' id='content'></div>
<span style='color:red' class='title'></span>
람다함수 잘 응용하면 기본함수도 대체 가능
bs.findAll(labda tag: tag.get_text() == '0r maybe he\'s only resting?')
== bs.findAll('', text='0r maybe he\'s only resting?')