referer : 쉽게 생각하면 크롤링하고 싶은 사이트의 직전 사이트라고 생각하면 된다. 외부에서의 접속이 아니라 이전 사이트에서의 접속이라면 정상적으로 인지
HTML내용을 눈으로 보고 싶다면 .text를 활용
2. HTML 파싱 : BeautifulSoup(req.text, parser)
library : bs4
requests.get()으로 얻어온 HTML은 단순 텍스트 형태이기 때문에, 원하는 정보를 찾아내기 위해 BeautifulSoup 객체로 변환
parser는 데이터의 종류는 입력하면 된다. html이외에도 lxml, xml등이 가능하다. html일 경우 ‘html.parser`
from bs4 import BeautifulSoup as bs
soup = bs(req.text, 'html.parser')
print(type(soup))
3. 파싱한 데이터에서 태그 선택 및 데이터 추출 : find_all() find() pd.read_html select_one
find_all()과 find() 모두 동일한 인자를 가진다 : find_all(태그명, class_ = class명)
두 가지의 차이점은 find_all()은 조건에 일치하는 태그를 모두 반환, find()는 조건에 맞는 가장 처음에 있는 태그를 반환
find_all()은 결과값을 리스트 형태로, find()는 결과 값을 태그 형태로 반환한다.
따라서 find()를 통해 얻은 결과는 보통 find_all을 통해 다시 추출하는 편..
select_one()은 첫 번째로 마주치는 결과를 반환한다는 점에서 find()와 유사하지만, 태그를 입력할 때 XML문법을 사용한다는 것이 다릅니다.
XML태그 예시 : div.footer_inner>div.nbanner_area - 사진 맨 아래 확인
pd.read_html() 로 HTML 테이블을 파싱한 경우 반환 값은 DataFrame들로 구성된 list 이다. 따라서 그 안에서 슬라이싱을 통해 원하는 테이블을 골라서 써야한다.
한글 테이블의 경우 encoding=”euc-kr”을 사용
# pd.read_html(~)리스트에서 1번째에 있는 데이터 프레임을 concat한 모습
df = pd.concat([df, pd.read_html(req.text, encoding = "euc-kr")[0]], ignore_index=True)
data = df.dropna().reset_index(drop=True)