작성
·
58
0
서버가 거부가 되어서 헤더추가까지 했는데도... 여전히 서버 거부인 듯하네요.. 강사님 그대로 따라 했는데.. 왜 이렇죠.ㅠㅠ
import requests
from bs4 import BeautifulSoup
import pandas as pd
# 파라미터 종류가 많은 경우 꿀팁
param = {
'isDetailSearch': 'N',
'searchGubun': 'true',
'viewYn': 'OP',
'strQuery': '패션 인공지능',
'order': '/DESC',
'onHanja': 'false',
'strSort': 'RANK',
'iStartCount': 0,
'fsearchMethod': 'search',
'sflag': 1,
'isFDetailSearch': 'N',
'pageNumber': 1,
'icate': 're_a_kor',
'colName': 're_a_kor',
'pageScale': 100,
'isTab': 'Y',
'query': '패션 인공지능',
}
reponse = requests.get('https://www.riss.kr/search/Search.do',params=param)
html = reponse.text
soup = BeautifulSoup(html, 'html.parser')
articles = soup.select('.srchResultListW > ul > li')
# 헤더가 필요한 경우(서버가 막힌 경우)
header = {
'User-Agent' : 'Mozilla/5.0',
'Referer' : 'https://www.riss.kr/search/Search.do?isDetailSearch=N&searchGubun=true&viewYn=OP&queryText=&strQuery=%ED%8C%A8%EC%85%98+%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5&exQuery=&exQueryText=&order=%2FDESC&onHanja=false&strSort=RANK&p_year1=&p_year2=&iStartCount=0&orderBy=&mat_type=&mat_subtype=&fulltext_kind=&t_gubun=&learning_type=&ccl_code=&inside_outside=&fric_yn=&db_type=&image_yn=&gubun=&kdc=&ttsUseYn=&l_sub_code=&fsearchMethod=search&sflag=1&isFDetailSearch=N&pageNumber=1&resultKeyword=&fsearchSort=&fsearchOrder=&limiterList=&limiterListText=&facetList=&facetListText=&fsearchDB=&icate=re_a_kor&colName=re_a_kor&pageScale=100&isTab=Y®nm=&dorg_storage=&language=&language_code=&clickKeyword=&relationKeyword=&query=%ED%8C%A8%EC%85%98+%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5',
}
for article in articles[:1]:
title = article.select_one('.title > a').text
link = 'https://www.riss.kr' + article.select_one('.title > a').attrs['href']
# 상세 페이지로 요청(페이지 안에 들어가야 내용이 있는 경우)
response = requests.get(link, headers=header)# 여기서 헤더 추가
html = reponse.text
soup = BeautifulSoup(html, 'html.parser')
print(soup)
press = soup.select_one('.infoDetailL > ul > li:nth-of-type(2) > div').text
#print(title,link,press)
답변 2
0
0
안녕하세요, 인프런 AI 인턴입니다.
루키22님의 질문에 관련된 유사한 상황을 해결하는 방법을 제공하는 예제를 찾았습니다. “헤더 추가”는 웹 크롤링 시 서버로부터의 거부를 방지하고, 자신을 웹 브라우저로 인식시키기 위해 자주 사용되는 기술입니다. 단, 단순히 User-Agent
를 추가하는 것만으로 충분하지 않을 때가 있습니다. 서버 거부 문제는 여러 원인을 가질 수 있으며, 그 중 하나로 “서버 측에서 추가적인 요청 확인 및 검증 방식”이 있을 수 있습니다.
User-Agent
값을 변경하여 요청했지만, 여전히 문제가 발생했음을 볼 수 있습니다. 문제 해결을 위해 강의자료를 확인하고 코드를 따라해도 문제가 지속되는 경우, 서버 측에서 요구하는 특정 헤더 정보(예: Referer
, Accept-Language
등)가 누락되었거나, 세션 관리에 필요한 쿠키(Cookie) 값을 전송하지 않는 등의 문제가 있을 수 있습니다.헤더 정보의 추가: 요청 시 User-Agent
외에도 Referer
(이전 페이지 주소), Accept-Language
(내용을 받아들일 언어) 등 추가적인 헤더 정보를 포함시키는 것이 좋습니다. 루키22님의 코드에서는 Referer
가 이미 추가되어 있네요.
세션 관리: 여러 페이지에 걸쳐 정보를 가져올 필요가 있는 경우 requests.Session()
을 사용하여 세션을 유지해야 할 수도 있습니다. 이는 서버 측에서 요구하는 쿠키(Cookie) 정보 등을 유지하여 연속된 요청이 같은 “사용자”에 의해 이루어지고 있음을 인식시키는 데 도움을 줍니다.
주의할 점: 때로는 서버 측에서 크롤링을 감지하여 일시적으로 접근을 차단하거나, IP를 차단할 수도 있습니다. 이 때문에 웹 크롤링 시간 간격을 설정하는 time.sleep()
의 사용, 비정상적인 접근 패턴을 피하기 위한 주의가 필요합니다.
루키22님의 경우, “서버 거부” 문제가 지속되는 경우, 요청 헤더 정보를 다시 검토하고 필요한 경우 세션 관리를 적절히 수행해 보시는 것을 권장합니다. 또한, 특정 페이지 또는 사이트의 크롤링 정책 또는 robots.txt
파일을 확인하여 해당 사이트의 크롤링 허용 범위도 확인하시길 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.