Fetch/XHR
을 보면 JSON 이나 XML을 통해 데이터를 받아온 내역을 볼 수 있다.geohash2는 위도, 경도의 특정 좌표를 영역을 나타내는 문자열 좌표로 변환해주는 패키지이다.
geohash = geohash2.encode(위도, 경도, precision=5)
이미 알고 있는 내용이 많으므로 필요한 개념 위주로 짚고 가자
<div>텍스트</div>
이런 형식from bs4 import BeautifulSoup
soup = BeautifulSoup(html)
HTML 문서를 크롤링하면 문자열 형태로 받아오게 되는데, BeautifulSoup
라는 클래스를 이용하여 파싱할 수 있다.
soup.select('CSS 선택자')
메서드를 이용하여 CSS 선택자로 원하는 Element를 선택할 수 있다.
select_one
메서드를 이용할 수 있다.soup.text
로 엘리먼트의 텍스트를 추출할 수 있다.
soup.get('attr')
메서드를 이용하여 엘리먼트의 속성값에 접근할 수 있다.
from PIL import Image as pil
pil.open('경로명.확장자')
파이썬에서 이미지를 처리하기위해서는 Pillow 패키지가 필요하다.
복습을 위해 스탯티즈 홈페이지에서 순위 정보를 크롤링 해보았다.
import requests
import pandas as pd
from bs4 import BeautifulSoup
# 1. url (생략)
# 2. request(url) > response : html(str)
response = requests.get(url)
response
# 3. html(str) > data(soup)
data = BeautifulSoup(response.text)
# 4. data(soup) > dict, list
dfs = []
for n in range(4, 14):
team = data.select_one(f"#mytable > tr:nth-child({n})")
if team:
team_data = team.select("td")
team_dict = {
"구단명" : team_data[1].text,
"순위" : team_data[0].text,
"WAR" : team_data[3].text,
"홈런" : team_data[11].text,
"타점" : team_data[13].text,
"도루" : team_data[14].text,
"타율" : team_data[23].text,
"출루" : team_data[24].text,
"OPS" : team_data[26].text,
"WRC+" : team_data[28].text,
"WPA" : team_data[30].text,
}
dfs.append(team_dict)
# 5. dict, list > DataFrame
df = pd.DataFrame(dfs)
셀레니움은 자동화를 위해 브라우저를 프로그래밍 언어로 컨트롤하는 라이브러이다.
파이썬 뿐만 아니라 다른 언어에서도 사용이 가능하다.
크롤링에서는 봇을 차단하는 웹사이트에 접근하기 위해 사용한다. (직접 브라우저를 실행해 접근하므로)
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.find_element(By.CSS_SELECTOR, "css selector")
driver.execute_script("스크립트")
window.scrollTo(a, b);
과 같은 JS 코드를 사용해 스크롤 조절이 가능하다.driver.quit()
css 선택자와 동일한 역할을 한다.
//*[@id="shoji"]/div[2]/div/div[2]/header/div/div[1]
//
: document의 최상위 엘리먼트를 의미/
: 한단계 아래 엘리먼트를 의미*
: 모든 하위 엘리먼트를 의미 (css selector에서 공백과 같은 의미)[@id="shoji"]
: 속성값으로 엘리먼트 선택 (id값이 shoji인 엘리먼트)div[2]
: 태그[n번째] - 1부터 시작driver.find_element(By.XPATH, "xpath")
를 통해 사용할 수 있다.
서버 컴퓨터와 같이 화면이 없는 브라우저에서는 창을 띄워 브라우징하는 것이 불가능하다.
이 때, 메모리상에만 화면을 띄우는 방법이 있는데 이를 headless 라고 한다.
headless 옵션을 설정하는 것을 통해 쉽게 사용할 수 있다.
options = webdriver.ChromeOptions()
options.add_argument('headless')
driver = webdriver.Chrome(options=options)
곧 미니프로젝트가 있는데, 프로젝트에 쓰일 데이터를 크롤링을 통해 최대한 많이 모으면 좋을 것 같다.
수업 도중에 정규표현식, 파이썬의 PEP 문서, xpath, 스페셜커맨드 등 다양한 개념을 추가로 배울 수 있었는데, 이번 주말에 조금 더 자세히 공부해봐야겠다.