인프런 커뮤니티 질문&답변
html 읽기 오류
작성
·
17
1
10:50 jupyter Line 41 대로 실행했는데 아래와 같이 에러가 발생하였습니다.
HTTPError Traceback (most recent call last)
Cell In[13], line 4
1 url = 'https://en.wikipedia.org/wiki/List_of_countries_and_dependencies_by_population'
3 # Read the HTML tables into a list of DataFrames
----> 4 tables = pd.read_html(url)
6 print(f"Number of tables found: {len(tables)}")
8 print(tables[1].head())
url이나 라이브러리 설치문제는 아닌것 같고 gpt에 물어보니 wiki서버 차단정책문제라고 나오는데 확실한지 궁금합니다.
맞다면 영상수정이 필요할것 같구요
답변 2
0
안녕하세요 dlclxkzk87님,
네, 위키 서버(정확히는 Wikimedia) 쪽의 User-Agent/봇 차단 정책 때문에 pd.read_html(url)이 HTTPError를 낼 수 있다는 설명은 꽤 확실합니다. 특히 요즘은 더 엄격해져서, User-Agent가 없거나 너무 기본값/자동화처럼 보이면 403(Forbidden) 을 주는 경우가 흔해요.
Wikimedia 자체 정책 문서에도 User-Agent 헤더가 없거나 빈/일반적인 값이면 403이 날 수 있다고 명시돼 있습니다
해결 방법으로는 다음과 같이 사용하시면 잘 될 겁니다. 이 방식은 User-Agent를 명시해서 차단될 확률을 크게 줄여줍니다.
import pandas as pd
import requests
# Sample URL containing an HTML table
url = 'https://en.wikipedia.org/wiki/List_of_countries_and_dependencies_by_population'
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome Safari"
}
resp = requests.get(url, headers=headers, timeout=30)
resp.raise_for_status()
# Read the HTML tables into a list of DataFrames
tables = pd.read_html(resp.text)
# Check the number of tables found
print(f"Number of tables found: {len(tables)}")
# Print the first table (usually the one of interest)
print(tables[1].head())
0
안녕하세요, 인프런 AI 인턴입니다. dlclxkzk87님.
pd.read_html(url)을 통해 웹페이지에서 HTML 테이블을 읽어오려는 시도가 있습니다. 현재 발생하고 있는 HTTPError는 종종 웹사이트가 특정 봇이나 프로그램의 접근을 차단할 때 나타날 수 있습니다. 구체적으로, 여러 웹사이트들이 데이터 스크래핑을 방지하기 위해 사용자 에이전트를 요구할 수도 있습니다.
하지만 이 문제는 다양한 이유로 발생할 수 있으며, 몇 가지 해결 방법을 제시 드리겠습니다:
- 사용자 에이전트 설정: 웹사이트는 가끔 스크래핑 시도를 차단하는 옵션을 가지고 있습니다. 이를 피하기 위해 특정 브라우저 정보와 함께 요청을 보내야 합니다.
import pandas as pd
import requests
url = 'https://en.wikipedia.org/wiki/List_of_countries_and_dependencies_by_population'
headers = {'User-Agent': 'Mozilla/5.0'}
response = requests.get(url, headers=headers)
tables = pd.read_html(response.text)
print(f"Number of tables found: {len(tables)}")
print(tables[1].head())
네트워크 또는 VPN 사용: 가끔 특정 네트워크 또는 IP 주소가 차단되어 있을 수 있습니다. 다른 네트워크나 VPN을 사용해 보십시오.
캐시 및 쿠키 삭제: 웹사이트에서 일정한 데이터를 캐시할 수도 있으므로, 브라우저의 캐시 및 쿠키를 삭제하고 다시 시도해 보세요.
이와 관련해 유사한 문제를 다룬 질문과 답변을 아래에서 확인해보실 수 있습니다:
- pandas.read_html()로 읽기 시 오류 해결 방법: pandas의 read_html 관련 문제 발생 시 해결 방법을 제시합니다.
문제를 해결하지 못한다면, 오류 메시지를 추가로 공유해 주시면 보다 정확한 도움을 드릴 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





감사합니다
다시 실행해보겠습니다.