작성
·
85
답변 1
0
안녕하세요. 답변 도우미입니다.
사이트 주소가 영상과 달라서, 해당 페이지에 해당 태그가 없기 때문에, 아무것도 출력이 안된 것으로 이해가 됩니다. 영상에서는 다음 페이지로 설명을 드리고 있습니다.
https://davelee-fun.github.io/blog/crawl_test_css.html
참고로, 일반적으로 작성된 코드에서 실행은 되었으나 결과가 출력되지 않는 이유는 여러 가지가 있을 수 있습니다. 몇 가지 참고할만한 점검해야 할 부분을 알려드리겠습니다.
### 1. URL 확인
우선 requests.get()
으로 가져온 URL이 정확하게 동작하는지 확인해보세요. 웹페이지가 응답하지 않거나 접근할 수 없는 경우, 빈 데이터를 반환할 수 있습니다.
```python
print(res.status_code) # 응답 상태 확인
print(res.text) # 페이지 내용 확인
```
위 코드를 추가해서 웹페이지가 제대로 로드되는지 먼저 확인해보세요. 상태 코드가 200이어야 정상적으로 접근이 된 것이고, res.text
로 가져온 내용이 빈 값이 아닌지 확인해보세요.
### 2. CSS 선택자 확인
CSS 선택자가 정확하지 않으면 원하는 데이터를 찾을 수 없습니다. 선택자가 제대로 작동하는지 확인하기 위해 선택된 항목이 있는지 먼저 확인하세요.
```python
print(len(items)) # 선택된 요소의 개수 출력
```
만약 len(items)
가 0이면 CSS 선택자가 잘못되었을 가능성이 있습니다. 웹 페이지 구조가 변경되었을 수 있으니, 페이지의 HTML 구조를 다시 확인하고 적절한 선택자를 사용해야 합니다.
예를 들어 ul#dev_course_list>li.course.paid
가 맞는지 다시 한 번 확인하세요. 선택자가 잘못된 경우 페이지의 HTML 요소를 브라우저 개발자 도구에서 다시 찾아보시고, 올바른 선택자를 지정해 주세요.
### 3. BeautifulSoup 파서 옵션
현재 "html.parser"
를 사용하고 있는데, 파서 옵션에 문제가 있을 가능성도 있습니다. lxml
파서를 사용하는 것도 하나의 방법입니다. 먼저 lxml
이 설치되어 있는지 확인하고 아래와 같이 수정해보세요.
```python
soup = BeautifulSoup(res.content, "lxml")
```
### 4. 네트워크 문제 또는 웹사이트 차단
일부 웹사이트는 크롤링을 방지하기 위해 요청을 차단하기도 합니다. 이를 피하려면 headers
를 추가해 사람의 브라우저에서 요청한 것처럼 요청을 위장할 수 있습니다.
```python
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
res = requests.get("https://davelee-fun.github.io/blog/crawl_test", headers=headers)
```
### 최종 코드 예시
```python
from bs4 import BeautifulSoup
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
res = requests.get("https://davelee-fun.github.io/blog/crawl_test", headers=headers)
if res.status_code == 200:
soup = BeautifulSoup(res.content, "html.parser")
items = soup.select("ul#dev_course_list>li.course.paid")
if items:
for item in items:
print(item.get_text())
else:
print("선택된 항목이 없습니다.")
else:
print("웹 페이지를 불러오지 못했습니다.", res.status_code)
```
위 코드로 실행해보고 결과가 나오는지 확인해보세요.
감사합니다.
잔재미코딩 드림