On the journey of
[AWS 사전공인교육] 10-1.Crawling 기본코드 정리 본문
사실 AWS 사전공인교육이 아니더라도 크롤링은 데이터 수집의 가장 대표적인 방법론으로 언급되는 만큼, 내가 보기 위해서라도 정리할 필요가 있다고 생각해 노션에 올려만 뒀던 것들과 결합해 작성해본다. 시험 끝나고 왔더니 죽을맛이다...
BeautifulSoup
정적 페이지 크롤링 library
!pip install beautifulsoup4
!pip install requests
[BS4 기본 코드]
import requests
from bs4 import BeautifulSoup
url = 'https://naver.com'
response = requests.get(url)
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')
# 모든 링크
for link in soup.find_all('a'):
print(link.get('href'))
Selenium
동적 페이지 크롤링 library
!pip install selenium
!pip install webdriver_manager
[Selenium 기본 코드]
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
chrome_options = Options()
# chrome_options.add_argument('--headless')
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
driver.get("https://www.naver.com")
a_list = driver.find_elements(By.TAG_NAME, "a")
for a in a_list:
try:
link = a.get_attribute('href')
print(f"링크: {link}")
except Exception as ex:
print(str(ex))
driver.quit()
동적 로딩 Test
BeautifulSoup 으로 다음의 html 코드의 페이지의 소스를 request 한다면?
<html>
<head>
<title>loading test</title>
</head>
<body>
Hello~
<div id="first">
</div>
</body>
<script type="text/javascript">
window.onload = (event) => {
setTimeout(() => {
console.log("첫 번째 메시지")
document.getElementById('first').innerHTML = 'AWS'
}, 3000);
console.log("page is loaded")
};
</script>
</html>
위의 html 페이지를 띄워두고 BeautifulSoup 으로 호출
import requests
from bs4 import BeautifulSoup
url = 'http://54.180.154.110:8080/'
response = requests.get(url)
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')
print(soup.currentTag)
결과
<html>
<head>
<title>loading test</title>
</head>
<body>
hey
<div id="first">
</div>
</body>
<script type="text/javascript">
window.onload = (event) => {
setTimeout(() => {
console.log("첫 번째 메시지")
document.getElementById('first').innerHTML = 'AWS'
}, 3000);
console.log("page is loaded")
};
</script>
</html>
흔히 말하는 정적인 html 페이지는 js 없는 것
정적, 동적 페이지는
→ 데이터가 로딩되는 시점에 따라 구분할 수 있음
'Experiences & Study > AWS' 카테고리의 다른 글
[AWS 사전공인교육] Streamlit 활용하기 (2) (1) | 2023.10.07 |
---|---|
[AWS 사전공인교육] Streamlit 활용하기 (1) (1) | 2023.10.04 |
[AWS 사전공인교육] 3. Lambda ~ 3.1 Hello World API (0) | 2023.09.19 |
[AWS 사전공인교육] 2. AWS Cloud9 - Hello World API 및 실행 (0) | 2023.09.16 |
[AWS 사전공인교육] 1. Cloud와 Serverless (0) | 2023.09.16 |